def ConstructCreateInstanceFromArgs(cls, sql_messages, args, original=None, instance_ref=None, release_track=DEFAULT_RELEASE_TRACK): """Constructs Instance for create request from base instance and args.""" ShowZoneDeprecationWarnings(args) instance_resource = cls._ConstructBaseInstanceFromArgs( sql_messages, args, original, instance_ref) instance_resource.region = reducers.Region(args.region, args.gce_zone) instance_resource.databaseVersion = args.database_version instance_resource.masterInstanceName = args.master_instance_name instance_resource.settings = cls._ConstructCreateSettingsFromArgs( sql_messages, args, original, release_track) if args.master_instance_name: replication = 'ASYNCHRONOUS' if args.replica_type == 'FAILOVER': instance_resource.replicaConfiguration = ( sql_messages.ReplicaConfiguration(failoverTarget=True)) else: replication = 'SYNCHRONOUS' if not args.replication: instance_resource.settings.replicationType = replication if args.failover_replica_name: instance_resource.failoverReplica = ( sql_messages.DatabaseInstance.FailoverReplicaValue( name=args.failover_replica_name)) return instance_resource
def ConstructCreateInstanceFromArgs(cls, sql_messages, args, original=None, instance_ref=None, release_track=DEFAULT_RELEASE_TRACK): """Constructs Instance for create request from base instance and args.""" ShowZoneDeprecationWarnings(args) instance_resource = cls._ConstructBaseInstanceFromArgs( sql_messages, args, original, instance_ref) instance_resource.region = reducers.Region(args.region, _GetZone(args)) instance_resource.databaseVersion = args.database_version instance_resource.masterInstanceName = args.master_instance_name instance_resource.rootPassword = args.root_password # BETA: Set the host port and return early if external master instance. if _IsBetaOrNewer(release_track) and args.IsSpecified('source_ip_address'): on_premises_configuration = reducers.OnPremisesConfiguration( sql_messages, args.source_ip_address, args.source_port) instance_resource.onPremisesConfiguration = on_premises_configuration return instance_resource instance_resource.settings = cls._ConstructCreateSettingsFromArgs( sql_messages, args, original, release_track) if args.master_instance_name: replication = 'ASYNCHRONOUS' if args.replica_type == 'FAILOVER': instance_resource.replicaConfiguration = ( sql_messages.ReplicaConfiguration(failoverTarget=True)) else: replication = 'SYNCHRONOUS' if not args.replication: instance_resource.settings.replicationType = replication if args.failover_replica_name: instance_resource.failoverReplica = ( sql_messages.DatabaseInstance.FailoverReplicaValue( name=args.failover_replica_name)) # BETA: Config for creating a replica of an external master instance. if _IsBetaOrNewer(release_track) and args.IsSpecified('master_username'): # Ensure that the master instance name is specified. if not args.IsSpecified('master_instance_name'): raise exceptions.RequiredArgumentException( '--master-instance-name', 'To create a read replica of an external ' 'master instance, [--master-instance-name] must be specified') # TODO(b/78648703): Remove when mutex required status is fixed. # Ensure that the master replication user password is specified. if not (args.IsSpecified('master_password') or args.IsSpecified('prompt_for_master_password')): raise exceptions.RequiredArgumentException( '--master-password', 'To create a read replica of an external ' 'master instance, [--master-password] or ' '[--prompt-for-master-password] must be specified') # Get password if not specified on command line. if args.prompt_for_master_password: args.master_password = getpass.getpass('Master Instance Password: ') instance_resource.replicaConfiguration = reducers.ReplicaConfiguration( sql_messages, args.master_username, args.master_password, args.master_dump_file_path, args.master_ca_certificate_path, args.client_certificate_path, args.client_key_path) # ALPHA args. if _IsAlpha(release_track): key_name = _GetAndValidateCmekKeyName(args) if key_name: config = sql_messages.DiskEncryptionConfiguration(kmsKeyName=key_name) instance_resource.diskEncryptionConfiguration = config return instance_resource
def testConsistentRegionAndZone(self): args = self.parser.parse_args( '--region europe-west1 --gce-zone europe-west1-a'.split()) self.assertEqual(reducers.Region(args.region, args.gce_zone), 'europe-west1')
def testZoneAndNoRegion(self): args = self.parser.parse_args('--gce-zone us-central1-b'.split()) self.assertEqual(reducers.Region(args.region, args.gce_zone), 'us-central1')
def testRegionAndNoZone(self): args = self.parser.parse_args('--region us-central1'.split()) self.assertEqual(reducers.Region(args.region, args.gce_zone), 'us-central1')
def testInconsistentRegionAndZone(self): args = self.parser.parse_args( '--region us-central1 --gce-zone europe-west1-a'.split()) # The zone is more precise than the region, so should inform the region. self.assertEqual(reducers.Region(args.region, args.gce_zone), 'europe-west1')