# -*- coding: utf-8 -*- # # Copyright 2014 Google LLC. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Defines tool-wide constants.""" from __future__ import absolute_import from __future__ import division from __future__ import unicode_literals import collections import enum import six BYTES_IN_ONE_MB = 2 ** 20 BYTES_IN_ONE_GB = 2 ** 30 STANDARD_DISK_PERFORMANCE_WARNING_GB = 200 SSD_DISK_PERFORMANCE_WARNING_GB = 10 SSD_SMALL_PARTITION_GB = 375 SSD_LARGE_PARTITION_GB = 3000 SSD_Z3_METAL_PARTITION_GB = 6000 # Disk types DISK_TYPE_PD_STANDARD = 'pd-standard' DISK_TYPE_PD_BALANCED = 'pd-balanced' DISK_TYPE_PD_SSD = 'pd-ssd' DISK_TYPE_PD_EXTREME = 'pd-extreme' DISK_TYPE_HD_EXTREME = 'hyperdisk-extreme' DISK_TYPE_HD_THROUGHPUT = 'hyperdisk-throughput' DISK_TYPE_HD_BALANCED = 'hyperdisk-balanced' # Provisioned IOPS for pd-extreme/cs-extreme disks MIN_PROVISIONED_IOPS = 2500 MAX_PROVISIONED_IOPS = 300000 DEFAULT_PROVISIONED_IOPS = 100000 # Default size for each disk type # TODO(b/233790191) Remove default disk sizes in gcloud. DEFAULT_DISK_SIZE_GB_MAP = { DISK_TYPE_PD_STANDARD: 500, DISK_TYPE_PD_BALANCED: 100, DISK_TYPE_PD_SSD: 100, DISK_TYPE_PD_EXTREME: 1000, DISK_TYPE_HD_EXTREME: 1000, DISK_TYPE_HD_THROUGHPUT: 2048, } LEGACY_DISK_TYPE_LIST = [ DISK_TYPE_PD_STANDARD, DISK_TYPE_PD_BALANCED, DISK_TYPE_PD_SSD, DISK_TYPE_PD_EXTREME, ] # The maximum number of results that can be returned in a single list # response. MAX_RESULTS_PER_PAGE = 500 # Defaults for instance creation. DEFAULT_ACCESS_CONFIG_NAME = 'external-nat' DEFAULT_IPV6_ACCESS_CONFIG_NAME = 'external-v6-access-config' CONFIDENTIAL_VM_TYPES = enum.Enum( 'CONFIDENTIAL_VM_TYPES', ['SEV', 'SEV_SNP', 'TDX'] ) DEFAULT_MACHINE_TYPE = 'n1-standard-1' DEFAULT_MACHINE_TYPE_FOR_CONFIDENTIAL_VMS = { CONFIDENTIAL_VM_TYPES.SEV: 'n2d-standard-2', CONFIDENTIAL_VM_TYPES.SEV_SNP: 'n2d-standard-2', CONFIDENTIAL_VM_TYPES.TDX: 'c3-standard-4', } DEFAULT_NETWORK = 'default' DEFAULT_NETWORK_INTERFACE = 'nic0' NETWORK_TIER_CHOICES_FOR_INSTANCE = ( 'PREMIUM', 'SELECT', 'STANDARD') NETWORK_INTERFACE_NIC_TYPE_CHOICES = ( 'VIRTIO_NET', 'GVNIC', 'RDMA', 'IDPF', 'MRDMA', 'IRDMA', ) NETWORK_INTERFACE_STACK_TYPE_CHOICES = ('IPV4_ONLY', 'IPV4_IPV6', 'IPV6_ONLY') NETWORK_INTERFACE_IPV6_ONLY_STACK_TYPE = 'IPV6_ONLY' NETWORK_INTERFACE_IGMP_QUERY_CHOICES = ('IGMP_QUERY_V2', 'IGMP_QUERY_DISABLED') NETWORK_INTERFACE_IPV6_NETWORK_TIER_CHOICES = ('PREMIUM',) ADV_NETWORK_TIER_CHOICES = ['DEFAULT', 'TIER_1'] DEFAULT_IMAGE_FAMILY = 'debian-12' DEFAULT_IMAGE_FAMILY_FOR_CONFIDENTIAL_VMS = { CONFIDENTIAL_VM_TYPES.SEV: 'ubuntu-2204-lts', CONFIDENTIAL_VM_TYPES.SEV_SNP: 'ubuntu-2204-lts', CONFIDENTIAL_VM_TYPES.TDX: 'ubuntu-2204-lts', } ImageAlias = collections.namedtuple( 'ImageAlias', ['project', 'name_prefix', 'family']) IMAGE_ALIASES = { 'centos-6': ImageAlias( project='centos-cloud', name_prefix='centos-6', family='centos-6'), 'centos-7': ImageAlias( project='centos-cloud', name_prefix='centos-7', family='centos-7'), 'container-vm': ImageAlias( project='google-containers', name_prefix='container-vm', family='container-vm'), 'cos': ImageAlias( project='cos-cloud', name_prefix='cos', family='cos'), 'debian-8': ImageAlias( project='debian-cloud', name_prefix='debian-8-jessie', family='debian-8'), 'fedora-coreos-stable': ImageAlias( project='fedora-coreos-cloud', name_prefix='fedora-coreos', family='fedora-coreos-stable'), 'rhel-6': ImageAlias( project='rhel-cloud', name_prefix='rhel-6', family='rhel-6'), 'rhel-7': ImageAlias( project='rhel-cloud', name_prefix='rhel-7', family='rhel-7'), 'rhel-8': ImageAlias( project='rhel-cloud', name_prefix='rhel-8', family='rhel-8'), 'sles-11': ImageAlias( project='suse-cloud', name_prefix='sles-11', family=None), 'sles-12': ImageAlias( project='suse-cloud', name_prefix='sles-12', family=None), 'ubuntu-12-04': ImageAlias( project='ubuntu-os-cloud', name_prefix='ubuntu-1204-precise', family='ubuntu-1204-lts'), 'ubuntu-14-04': ImageAlias( project='ubuntu-os-cloud', name_prefix='ubuntu-1404-trusty', family='ubuntu-1404-lts'), 'windows-2008-r2': ImageAlias( project='windows-cloud', name_prefix='windows-server-2008-r2', family='windows-2008-r2'), 'windows-2012-r2': ImageAlias( project='windows-cloud', name_prefix='windows-server-2012-r2', family='windows-2012-r2'), } # These are like IMAGE_ALIASES, but don't show up in the alias list. HIDDEN_IMAGE_ALIASES = { 'gae-builder-vm': ImageAlias( project='goog-vmruntime-images', name_prefix='gae-builder-vm', family=None), 'opensuse-13': ImageAlias( project='opensuse-cloud', name_prefix='opensuse-13', family=None), } WINDOWS_IMAGE_PROJECTS = [ 'windows-cloud', 'windows-sql-cloud' ] BASE_PUBLIC_IMAGE_PROJECTS = [ 'cos-cloud', 'debian-cloud', 'rocky-linux-cloud', 'ubuntu-os-cloud', ] PUBLIC_IMAGE_PROJECTS = BASE_PUBLIC_IMAGE_PROJECTS + [ 'centos-cloud', 'fedora-coreos-cloud', 'opensuse-cloud', 'oracle-linux-cloud', 'rhel-cloud', 'rhel-sap-cloud', 'rocky-linux-accelerator-cloud', 'suse-cloud', 'suse-sap-cloud', 'ubuntu-os-accelerator-images', 'ubuntu-os-pro-cloud', ] + WINDOWS_IMAGE_PROJECTS PREVIEW_IMAGE_PROJECTS = [] # SSH-related constants. SSH_KEYS_METADATA_KEY = 'ssh-keys' SSH_KEYS_LEGACY_METADATA_KEY = 'sshKeys' SSH_KEYS_BLOCK_METADATA_KEY = 'block-project-ssh-keys' MAX_METADATA_VALUE_SIZE_IN_BYTES = 262144 SSH_KEY_TYPES = ('ssh-dss', 'ecdsa-sha2-nistp256', 'ssh-ed25519', 'ssh-rsa') _STORAGE_RO = 'https://www.googleapis.com/auth/devstorage.read_only' _LOGGING_WRITE = 'https://www.googleapis.com/auth/logging.write' _MONITORING_WRITE = 'https://www.googleapis.com/auth/monitoring.write' _MONITORING = 'https://www.googleapis.com/auth/monitoring' _SERVICE_CONTROL_SCOPE = 'https://www.googleapis.com/auth/servicecontrol' _SERVICE_MANAGEMENT_SCOPE = 'https://www.googleapis.com/auth/service.management.readonly' _SOURCE_REPOS = 'https://www.googleapis.com/auth/source.full_control' _SOURCE_REPOS_RO = 'https://www.googleapis.com/auth/source.read_only' _PUBSUB = 'https://www.googleapis.com/auth/pubsub' _STACKDRIVER_TRACE = 'https://www.googleapis.com/auth/trace.append' DEFAULT_SCOPES = sorted([ _STORAGE_RO, _LOGGING_WRITE, _MONITORING_WRITE, _SERVICE_CONTROL_SCOPE, _SERVICE_MANAGEMENT_SCOPE, _PUBSUB, _STACKDRIVER_TRACE, ]) GKE_DEFAULT_SCOPES = sorted([ _STORAGE_RO, _LOGGING_WRITE, _MONITORING, _SERVICE_CONTROL_SCOPE, _SERVICE_MANAGEMENT_SCOPE, _STACKDRIVER_TRACE, ]) DEPRECATED_SQL_SCOPE_MSG = """\ DEPRECATION WARNING: https://www.googleapis.com/auth/sqlservice account scope and `sql` alias do not provide SQL instance management capabilities and have been deprecated. Please, use https://www.googleapis.com/auth/sqlservice.admin or `sql-admin` to manage your Google SQL Service instances. """ DEPRECATED_SCOPES_MESSAGES = DEPRECATED_SQL_SCOPE_MSG DEPRECATED_SCOPE_ALIASES = {'sql'} SCOPES = { 'bigquery': ['https://www.googleapis.com/auth/bigquery'], 'cloud-platform': ['https://www.googleapis.com/auth/cloud-platform'], 'cloud-source-repos': [_SOURCE_REPOS], 'cloud-source-repos-ro': [_SOURCE_REPOS_RO], 'compute-ro': ['https://www.googleapis.com/auth/compute.readonly'], 'compute-rw': ['https://www.googleapis.com/auth/compute'], 'default': DEFAULT_SCOPES, 'gke-default': GKE_DEFAULT_SCOPES, 'datastore': ['https://www.googleapis.com/auth/datastore'], 'logging-write': [_LOGGING_WRITE], 'monitoring': [_MONITORING], 'monitoring-read': ['https://www.googleapis.com/auth/monitoring.read'], 'monitoring-write': [_MONITORING_WRITE], 'service-control': [_SERVICE_CONTROL_SCOPE], 'service-management': [_SERVICE_MANAGEMENT_SCOPE], 'sql': ['https://www.googleapis.com/auth/sqlservice'], 'sql-admin': ['https://www.googleapis.com/auth/sqlservice.admin'], 'trace': [_STACKDRIVER_TRACE], 'storage-full': ['https://www.googleapis.com/auth/devstorage.full_control'], 'storage-ro': [_STORAGE_RO], 'storage-rw': ['https://www.googleapis.com/auth/devstorage.read_write'], 'taskqueue': ['https://www.googleapis.com/auth/taskqueue'], 'userinfo-email': ['https://www.googleapis.com/auth/userinfo.email'], 'pubsub': ['https://www.googleapis.com/auth/pubsub'], } def ScopesHelp(): """Returns the command help text markdown for scopes. Returns: The command help text markdown with scope intro text, aliases, and optional notes and/or warnings. """ aliases = [] for alias, value in sorted(six.iteritems(SCOPES)): if alias in DEPRECATED_SCOPE_ALIASES: alias = '{} (deprecated)'.format(alias) aliases.append('{0} | {1}'.format(alias, value[0])) for item in value[1:]: aliases.append('| ' + item) return """\ SCOPE can be either the full URI of the scope or an alias. *Default* scopes are assigned to all instances. Available aliases are: Alias | URI --- | --- {aliases} {scope_deprecation_msg} """.format( aliases='\n'.join(aliases), scope_deprecation_msg=DEPRECATED_SCOPES_MESSAGES)