Exemple #1
0
    def Run(self, args):
        """Run 'runtime-configs waiters list'.

    Args:
      args: argparse.Namespace, The arguments that this command was invoked
          with.

    Yields:
      The list of waiters.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        waiter_client = util.WaiterClient()
        messages = util.Messages()

        config_resource = util.ParseConfigName(util.ConfigName(args))

        request = messages.RuntimeconfigProjectsConfigsWaitersListRequest(
            parent=config_resource.RelativeName(), )

        page_size = args.page_size or self.DEFAULT_PAGE_SIZE

        results = list_pager.YieldFromList(waiter_client,
                                           request,
                                           field='waiters',
                                           batch_size_attribute='pageSize',
                                           limit=args.limit,
                                           batch_size=page_size)

        for result in results:
            yield util.FormatWaiter(result)
Exemple #2
0
  def testWait(self):
    waiter_name = 'projects/{0}/configs/foo/waiters/bar'.format(self.Project())
    request = self.messages.RuntimeconfigProjectsConfigsWaitersGetRequest(
        name=waiter_name,
    )
    not_done_result = self.messages.Waiter(
        name=waiter_name,
        timeout='30s',
        success=self.messages.EndCondition(
            cardinality=self.messages.Cardinality(
                path='/success',
                number=1,
            )
        )
    )
    done_result = self.messages.Waiter(
        name=waiter_name,
        timeout='30s',
        success=self.messages.EndCondition(
            cardinality=self.messages.Cardinality(
                path='/success',
                number=1,
            )
        ),
        done=True
    )

    self.waiter_client.Get.Expect(request, not_done_result)
    self.waiter_client.Get.Expect(request, not_done_result)
    self.waiter_client.Get.Expect(request, done_result)

    got_result = self.RunRuntimeConfig(
        'waiters wait bar --config-name foo')

    self.assertEqual(util.FormatWaiter(done_result), got_result)
    def testCreateAsync(self):
        expected_result = self._setupCreateAsyncTest()
        got_result = self.RunRuntimeConfig(
            'waiters create bar --config-name foo --timeout 1m '
            '--success-cardinality-path /success --async')

        self.assertEqual(util.FormatWaiter(expected_result), got_result)
Exemple #4
0
    def testList(self):
        # Tests a list request with two pages.
        config_name = 'projects/{0}/configs/foo'.format(self.Project())
        success = self.messages.EndCondition(
            cardinality=self.messages.Cardinality(
                path='/success',
                number=1,
            ))
        waiters = [
            self.messages.Waiter(
                name='projects/{0}/configs/foo/waiters/bar1'.format(
                    self.Project()),
                timeout='30s',
                success=success,
            ),
            self.messages.Waiter(
                name='projects/{0}/configs/foo/waiters/bar2'.format(
                    self.Project()),
                timeout='30s',
                success=success,
                done=True,
            ),
        ]
        request_1 = self.messages.RuntimeconfigProjectsConfigsWaitersListRequest(
            parent=config_name,
            pageSize=self.DEFAULT_PAGE_SIZE,
        )
        request_2 = self.messages.RuntimeconfigProjectsConfigsWaitersListRequest(
            parent=config_name,
            pageSize=self.DEFAULT_PAGE_SIZE,
            pageToken='foobar',
        )

        wrapped_result_1 = self.messages.ListWaitersResponse(
            waiters=waiters[:1],
            nextPageToken='foobar',
        )
        wrapped_result_2 = self.messages.ListWaitersResponse(
            waiters=waiters[1:],
            nextPageToken=None,
        )

        self.waiter_client.List.Expect(request_1, wrapped_result_1)
        self.waiter_client.List.Expect(request_2, wrapped_result_2)
        got_result = self.RunRuntimeConfig('waiters list --config-name foo')

        self.assertEqual([util.FormatWaiter(w) for w in waiters],
                         list(got_result))
    def testCreateWithSuccessOnly(self):
        config_name = 'projects/{0}/configs/foo'.format(self.Project())
        waiter_name = 'projects/{0}/configs/foo/waiters/bar'.format(
            self.Project())
        op_name = 'projects/{0}/configs/foo/operations/waiters/bar'.format(
            self.Project())
        cr_request = self.messages.RuntimeconfigProjectsConfigsWaitersCreateRequest(
            parent=config_name,
            waiter=self.messages.Waiter(
                name=waiter_name,
                timeout='60s',
                success=self.messages.EndCondition(
                    cardinality=self.messages.Cardinality(
                        path='/success',
                        number=1,
                    ))),
        )
        cr_result = self.messages.Operation(name=op_name, done=False)

        get_request = self.messages.RuntimeconfigProjectsConfigsWaitersGetRequest(
            name=waiter_name, )
        not_done_result = self.messages.Waiter(
            name=waiter_name,
            timeout='60s',
            success=self.messages.EndCondition(
                cardinality=self.messages.Cardinality(
                    path='/success',
                    number=1,
                )))
        done_result = self.messages.Waiter(
            name=waiter_name,
            timeout='60s',
            success=self.messages.EndCondition(
                cardinality=self.messages.Cardinality(
                    path='/success',
                    number=1,
                )),
            done=True)

        self.waiter_client.Create.Expect(cr_request, cr_result)
        self.waiter_client.Get.Expect(get_request, not_done_result)
        self.waiter_client.Get.Expect(get_request, done_result)
        got_result = self.RunRuntimeConfig(
            'waiters create bar --config-name foo --timeout 1m '
            '--success-cardinality-path /success')

        self.assertEqual(util.FormatWaiter(done_result), got_result)
Exemple #6
0
 def testFormatWaiter(self):
     waiter = MESSAGE_MODULE.Waiter(
         name='projects/my-project/configs/my-config/waiters/my-waiter',
         timeout='120',
         success=MESSAGE_MODULE.EndCondition(
             cardinality=MESSAGE_MODULE.Cardinality(
                 path='/success',
                 number=2,
             )),
         failure=MESSAGE_MODULE.EndCondition(
             cardinality=MESSAGE_MODULE.Cardinality(
                 path='/failure',
                 number=1,
             )),
         done=True,
         error=MESSAGE_MODULE.Status(code=9, message='failure'),
         createTime='2016-04-29T00:00:00Z',
     )
     munged_waiter = {
         'atomicName':
         'projects/my-project/configs/my-config/waiters/my-waiter',
         'name': 'my-waiter',
         'timeout': '120',
         'success': {
             'cardinality': {
                 'path': '/success',
                 'number': 2
             }
         },
         'failure': {
             'cardinality': {
                 'path': '/failure',
                 'number': 1
             }
         },
         'done': True,
         'error': {
             'code': 9,
             'message': 'failure'
         },
         'createTime': '2016-04-29T00:00:00Z'
     }
     self.assertEqual(util.FormatWaiter(waiter), munged_waiter)
Exemple #7
0
    def Run(self, args):
        """Run 'runtime-configs waiters wait'.

    Args:
      args: argparse.Namespace, The arguments that this command was invoked
          with.

    Returns:
      The requested waiter, after waiting for it to succeed or fail.

    Raises:
      HttpException: An http error response was received while executing api
          request.
      OperationTimeoutError: If the waiter doesn't complete in time.
    """
        waiter_resource = util.ParseWaiterName(args.name, args)
        result = util.WaitForWaiter(waiter_resource, max_wait=args.max_wait)
        if util.IsFailedWaiter(result):
            self.exit_code = 2  # exit with code 2 if the result waiter failed.
        return util.FormatWaiter(result)
Exemple #8
0
    def testListCustomPageSize(self):
        config_name = 'projects/{0}/configs/foo'.format(self.Project())
        success = self.messages.EndCondition(
            cardinality=self.messages.Cardinality(
                path='/success',
                number=1,
            ))
        waiters = [
            self.messages.Waiter(
                name='projects/{0}/configs/foo/waiters/bar1'.format(
                    self.Project()),
                timeout='30s',
                success=success,
            ),
            self.messages.Waiter(
                name='projects/{0}/configs/foo/waiters/bar2'.format(
                    self.Project()),
                timeout='30s',
                success=success,
                done=True,
            ),
        ]

        request = self.messages.RuntimeconfigProjectsConfigsWaitersListRequest(
            parent=config_name,
            pageSize=55,
        )
        wrapped_result = self.messages.ListWaitersResponse(
            waiters=waiters,
            nextPageToken=None,
        )

        self.waiter_client.List.Expect(request, wrapped_result)
        got_result = self.RunRuntimeConfig(
            'waiters list --config-name foo --page-size 55')

        self.assertEqual([util.FormatWaiter(w) for w in waiters],
                         list(got_result))
Exemple #9
0
    def Run(self, args):
        """Run 'runtime-configs waiters describe'.

    Args:
      args: argparse.Namespace, The arguments that this command was invoked
          with.

    Returns:
      The requested waiter.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        waiter_client = util.WaiterClient()
        messages = util.Messages()

        waiter_resource = util.ParseWaiterName(args.name, args)

        result = waiter_client.Get(
            messages.RuntimeconfigProjectsConfigsWaitersGetRequest(
                name=waiter_resource.RelativeName(), ))

        return util.FormatWaiter(result)
Exemple #10
0
    def Run(self, args):
        """Run 'runtime-configs waiters create'.

    Args:
      args: argparse.Namespace, The arguments that this command was invoked
          with.

    Returns:
      The associated waiter operation.

    Raises:
      HttpException: An http error response was received while executing api
          request.
    """
        waiter_client = util.WaiterClient()
        messages = util.Messages()

        waiter_resource = util.ParseWaiterName(args.name, args)
        project = waiter_resource.projectsId
        config = waiter_resource.configsId

        success = messages.EndCondition(cardinality=messages.Cardinality(
            path=args.success_cardinality_path,
            number=args.success_cardinality_number,
        ))

        if args.failure_cardinality_path:
            failure = messages.EndCondition(cardinality=messages.Cardinality(
                path=args.failure_cardinality_path,
                number=args.failure_cardinality_number,
            ))
        else:
            failure = None

        result = waiter_client.Create(
            messages.RuntimeconfigProjectsConfigsWaitersCreateRequest(
                parent=util.ConfigPath(project, config),
                waiter=messages.Waiter(
                    name=waiter_resource.RelativeName(),
                    timeout='{0}s'.format(args.timeout),
                    success=success,
                    failure=failure,
                )))

        log.CreatedResource(waiter_resource)

        if args. async:
            # In async mode, we return the current waiter representation.
            # The waiter resource exists immediately after creation; the
            # operation resource returned from CreateWaiter only tracks the
            # waiting process.
            self._async_resource = waiter_resource
            request = (waiter_client.client.MESSAGES_MODULE.
                       RuntimeconfigProjectsConfigsWaitersGetRequest(
                           name=waiter_resource.RelativeName()))
            result = waiter_client.Get(request)
        else:
            self._async_resource = None
            result = util.WaitForWaiter(waiter_resource)
            if util.IsFailedWaiter(result):
                self.exit_code = 2  # exit with code 2 if the result waiter failed.

        return util.FormatWaiter(result)