Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
  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')