コード例 #1
0
  def Run(self, args):
    api_client = appengine_api_client.GetApiClient()
    all_instances = api_client.GetAllInstances(
        args.service, args.version,
        version_filter=lambda v: util.Environment.IsFlexible(v.environment))
    try:
      res = resources.REGISTRY.Parse(args.instance)
    except Exception:  # pylint:disable=broad-except
      # Either the commandline argument is an instance ID, or is empty.
      # If empty, use interactive selection to choose an instance.
      instance = instances_util.GetMatchingInstance(
          all_instances, service=args.service, version=args.version,
          instance=args.instance)
    else:
      instance = instances_util.GetMatchingInstance(
          all_instances, service=res.servicesId, version=res.versionsId,
          instance=res.instancesId)

    console_io.PromptContinue(
        'About to disable debug mode for instance [{0}].\n\n'
        'Any local changes will be LOST. New instance(s) may spawn depending '
        'on the app\'s scaling settings.'.format(instance), cancel_on_no=True)
    message = 'Disabling debug mode for instance [{0}]'.format(instance)

    res = resources.REGISTRY.Parse(instance.id,
                                   params={'servicesId': instance.service,
                                           'versionsId': instance.version},
                                   collection='appengine.apps.services.'
                                              'versions.instances')
    with progress_tracker.ProgressTracker(message):
      api_client.DeleteInstance(res)
コード例 #2
0
  def Run(self, args):
    api_client = appengine_api_client.GetApiClient()
    all_instances = api_client.GetAllInstances(
        args.service, args.version,
        version_filter=lambda v: util.Environment.IsFlexible(v.environment))
    try:
      res = resources.REGISTRY.Parse(args.instance)
    except Exception:  # pylint:disable=broad-except
      # If parsing fails, use interactive selection or provided instance ID.
      instance = instances_util.GetMatchingInstance(
          all_instances, service=args.service, version=args.version,
          instance=args.instance)
    else:
      instance = instances_util.GetMatchingInstance(
          all_instances, service=res.servicesId, version=res.versionsId,
          instance=res.instancesId)

    console_io.PromptContinue(
        'About to enable debug mode for instance [{0}].'.format(instance),
        cancel_on_no=True)
    message = 'Enabling debug mode for instance [{0}]'.format(instance)
    res = resources.REGISTRY.Parse(instance.id,
                                   params={'versionsId': instance.version,
                                           'instancesId': instance.id,
                                           'servicesId': instance.service},
                                   collection='appengine.apps.services.'
                                              'versions.instances')
    with progress_tracker.ProgressTracker(message):
      api_client.DebugInstance(res)
コード例 #3
0
  def Run(self, args):
    api_client = appengine_api_client.GetApiClientForTrack(self.ReleaseTrack())
    all_instances = list(api_client.GetAllInstances(
        args.service, args.version,
        version_filter=lambda v: v.environment in [env.FLEX, env.MANAGED_VMS]))
    try:
      res = resources.REGISTRY.Parse(args.instance)
    except Exception:  # pylint:disable=broad-except
      # If parsing fails, use interactive selection or provided instance ID.
      instance = instances_util.GetMatchingInstance(
          all_instances, service=args.service, version=args.version,
          instance=args.instance)
    else:
      instance = instances_util.GetMatchingInstance(
          all_instances, service=res.servicesId, version=res.versionsId,
          instance=res.instancesId)

    console_io.PromptContinue(
        'About to enable debug mode for instance [{0}].'.format(instance),
        cancel_on_no=True)
    message = 'Enabling debug mode for instance [{0}]'.format(instance)
    res = resources.REGISTRY.Parse(
        instance.id,
        params={
            'appsId': properties.VALUES.core.project.GetOrFail,
            'versionsId': instance.version,
            'instancesId': instance.id,
            'servicesId': instance.service,
        },
        collection='appengine.apps.services.versions.instances')
    with progress_tracker.ProgressTracker(message):
      api_client.DebugInstance(res)
コード例 #4
0
    def Run(self, args):
        client = appengine_client.AppengineClient()
        # --user-output-enabled=false prevents this from printing, as well as from
        # consuming the generator from the other command
        # The command being called here uses a cli.Execute call under-the-hood, so
        # in order to avoid leaking the abstraction we defer to the implementation
        # in `instances list`.
        all_instances = list(
            self.cli.Execute([
                'preview', 'app', 'instances', 'list',
                '--user-output-enabled=false', '--project',
                properties.VALUES.core.project.Get()
            ]))
        instance = instances_util.GetMatchingInstance(all_instances,
                                                      service=args.service,
                                                      version=args.version,
                                                      instance=args.instance)

        console_io.PromptContinue(
            'Enabling debug mode for instance [{0}].'.format(instance),
            cancel_on_no=True)
        client.SetManagedBySelf(module=instance.service,
                                version=instance.version,
                                instance=instance.id)
        log.status.Print(
            'Enabled debug mode for instance [{0}].'.format(instance))
コード例 #5
0
 def testGetMatchingInstance_NonInteractiveNoMatches(self):
   with self.assertRaisesRegex(
       instances_util.InvalidInstanceSpecificationError,
       r'No instances match the given specification\.\n\n'
       r"All instances: \['service1/v1/i1', 'service1/v1/i2', "
       r"'service1/v2/i3', 'service2/v1/i4'\]"):
     instances_util.GetMatchingInstance(list(self.instances.values()),
                                        instance='bad')
コード例 #6
0
  def testGetMatchingInstance_Interactive(self):
    self.select_mock.return_value = self.instances['i1']

    self.assertEqual(
        instances_util.GetMatchingInstance(list(self.instances.values())),
        self.instances['i1'])

    self.select_mock.assert_called_once_with(list(self.instances.values()),
                                             service=None, version=None)
コード例 #7
0
 def testGetMatchingInstance_NonInteractiveTooManyMatches(self):
   # In order to generate more than one match, we need more than one instance
   # with the same ID. We don't have that in self.instances because it makes
   # the other tests more difficult to write.
   instances = [
       instances_util.Instance.FromResourcePath('service1/v1/abcd'),
       instances_util.Instance.FromResourcePath('service1/v2/abcd')
   ]
   with self.assertRaisesRegex(
       instances_util.InvalidInstanceSpecificationError,
       r'More than one instance matches the given specification\.\n\n'
       r"Matching instances: \['service1/v1/abcd', 'service1/v2/abcd'\]"):
     instances_util.GetMatchingInstance(instances, instance='abcd')
コード例 #8
0
  def Run(self, args):
    api_client = appengine_api_client.GetApiClient()
    all_instances = api_client.GetAllInstances(args.service, args.version)
    # Only VM instances can be placed in debug mode for now.
    all_instances = filter(operator.attrgetter('instance.vmName'),
                           all_instances)
    instance = instances_util.GetMatchingInstance(
        all_instances, service=args.service, version=args.version,
        instance=args.instance)

    console_io.PromptContinue(
        'About to disable debug mode for instance [{0}].\n\n'
        'Any local changes will be LOST. New instance(s) may spawn depending '
        'on the app\'s scaling settings.'.format(instance), cancel_on_no=True)
    message = 'Disabling debug mode for instance [{0}]'.format(instance)
    with progress_tracker.ProgressTracker(message):
      api_client.DeleteInstance(service=instance.service,
                                version=instance.version,
                                instance=instance.id)
コード例 #9
0
    def Run(self, args):
        api_client = appengine_api_client.GetApiClient()
        all_instances = api_client.GetAllInstances(args.service, args.version)
        # Only VM instances can be placed in debug mode for now.
        all_instances = filter(operator.attrgetter('instance.vmName'),
                               all_instances)
        instance = instances_util.GetMatchingInstance(all_instances,
                                                      service=args.service,
                                                      version=args.version,
                                                      instance=args.instance)

        console_io.PromptContinue(
            'About to enable debug mode for instance [{0}].'.format(instance),
            cancel_on_no=True)
        message = 'Enabling debug mode for instance [{0}]'.format(instance)
        with console_io.ProgressTracker(message):
            api_client.DebugInstance(service=instance.service,
                                     version=instance.version,
                                     instance=instance.id)
コード例 #10
0
 def testGetMatchingInstance_NonInteractive(self):
   for instance_id, instance in self.instances.items():
     self.assertEqual(
         instances_util.GetMatchingInstance(list(self.instances.values()),
                                            instance=instance_id),
         instance)