def testGetAndValidateParametersMissingRequiredNotSpecified(self):
     self._MakeEventType(include_props=True)
     args = self.parser.parse_args([])
     with self.assertRaises(
             exceptions.MissingRequiredEventTypeParameters) as ctx:
         flags.GetAndValidateParameters(args, self.event_type)
     self.assertIn('prop0', str(ctx.exception))
 def testGetAndValidateParametersFromFileAndSecretParameters(self):
     self._MakeEventType(include_props=True, include_secret_props=True)
     filename = self._MakeTempFile("""
 prop0: value
 prop1: value
 prop2: value
 """)
     args = self.parser.parse_args([
         '--parameters-from-file', filename,
         '--secrets=prop3Secret=name:value,prop4Secret=name:value'
     ])
     expected = {
         'prop0': 'value',
         'prop1': 'value',
         'prop2': 'value',
         'prop3Secret': {
             'name': 'name',
             'key': 'value'
         },
         'prop4Secret': {
             'name': 'name',
             'key': 'value'
         }
     }
     self.assertDictEqual(
         expected, flags.GetAndValidateParameters(args, self.event_type))
 def testGetAndValidateParameters(self):
     self._MakeEventType(include_props=True)
     args = self.parser.parse_args(
         ['--parameters=prop0=value,prop1=value,prop2=value'])
     expected = {'prop0': 'value', 'prop1': 'value', 'prop2': 'value'}
     self.assertDictEqual(
         expected, flags.GetAndValidateParameters(args, self.event_type))
 def testGetAndValidateParametersUnknown(self):
     self._MakeEventType(include_props=True)
     args = self.parser.parse_args(
         ['--parameters=prop0=value,unknown=value'])
     with self.assertRaises(exceptions.UnknownEventTypeParameters) as ctx:
         flags.GetAndValidateParameters(args, self.event_type)
     self.assertIn('unknown', str(ctx.exception))
 def testGetAndValidateSecretParametersMissingRequired(self):
     self._MakeEventType(include_secret_props=True)
     args = self.parser.parse_args(['--secrets=prop1Secret=name:value'])
     with self.assertRaises(
             exceptions.MissingRequiredEventTypeParameters) as ctx:
         flags.GetAndValidateParameters(args, self.event_type)
     self.assertIn('prop0Secret', str(ctx.exception))
 def testGetAndValidateParametersFromFileUnknown(self):
     self._MakeEventType(include_props=True)
     filename = self._MakeTempFile("""
 prop0: value
 unknown: value
 """)
     args = self.parser.parse_args(['--parameters-from-file', filename])
     with self.assertRaises(exceptions.UnknownEventTypeParameters) as ctx:
         flags.GetAndValidateParameters(args, self.event_type)
     self.assertIn('unknown', str(ctx.exception))
 def testGetAndValidateSecretParametersUnknownMultiple(self):
     self._MakeEventType(include_secret_props=True)
     args = self.parser.parse_args([
         '--secrets=prop0Secret=name:value,unknownSecret=name:value,'
         'anotherUnknownSecret=name:value'
     ])
     with self.assertRaises(exceptions.UnknownEventTypeParameters) as ctx:
         flags.GetAndValidateParameters(args, self.event_type)
     self.assertIn('unknownSecret', str(ctx.exception))
     self.assertIn('anotherUnknownSecret', str(ctx.exception))
 def testGetAndValidateParametersFromFileMissingRequired(self):
     self._MakeEventType(include_props=True)
     filename = self._MakeTempFile("""
 prop1: value
 prop2: value
 """)
     args = self.parser.parse_args(['--parameters-from-file', filename])
     with self.assertRaises(
             exceptions.MissingRequiredEventTypeParameters) as ctx:
         flags.GetAndValidateParameters(args, self.event_type)
     self.assertIn('prop0', str(ctx.exception))
 def testGetAndValidateParametersFromFile(self):
     self._MakeEventType(include_props=True)
     filename = self._MakeTempFile("""
 prop0: value
 prop1: value
 prop2: value
 """)
     args = self.parser.parse_args(['--parameters-from-file', filename])
     expected = {'prop0': 'value', 'prop1': 'value', 'prop2': 'value'}
     self.assertDictEqual(
         expected, flags.GetAndValidateParameters(args, self.event_type))
Exemple #10
0
  def Run(self, args):
    conn_context = connection_context.GetConnectionContext(
        args, product=connection_context.Product.EVENTS)
    if conn_context.supports_one_platform:
      raise exceptions.UnsupportedArgumentError(
          'Events are only available with Cloud Run for Anthos.')

    trigger_ref = args.CONCEPTS.trigger.Parse()
    namespace_ref = trigger_ref.Parent()
    with eventflow_operations.Connect(conn_context) as client:
      source_crds = client.ListSourceCustomResourceDefinitions()
      event_type = util.EventTypeFromTypeString(source_crds, args.type)
      source_obj = source.Source.New(client.client, namespace_ref.Name(),
                                     event_type.crd.source_kind,
                                     event_type.crd.source_api_category)
      source_obj.name = _SOURCE_NAME_PATTERN.format(
          trigger=trigger_ref.Name())

      trigger_obj = client.GetTrigger(trigger_ref)
      if trigger_obj is not None:
        # If trigger already exists, validate it has the attributes we're trying
        # to set right now.
        try:
          util.ValidateTrigger(trigger_obj, source_obj, event_type)
        except AssertionError:
          raise exceptions.TriggerCreationError(
              'Trigger [{}] already exists with attributes not '
              'matching this event type.'.format(trigger_obj.name))
        # If the trigger has the right attributes, check if there's already
        # a source that matches the attributes as well.
        source_ref = util.GetSourceRef(
            source_obj.name, source_obj.namespace, event_type.crd)
        if client.GetSource(source_ref, event_type.crd) is not None:
          raise exceptions.TriggerCreationError(
              'Trigger [{}] already exists.'.format(trigger_obj.name))

      parameters = events_flags.GetAndValidateParameters(args, event_type)

      # Create the trigger and source
      with progress_tracker.StagedProgressTracker(
          'Initializing trigger...',
          stages.TriggerSourceStages(),
          failure_message='Trigger creation failed') as tracker:
        client.CreateTriggerAndSource(
            trigger_obj,
            trigger_ref,
            namespace_ref,
            source_obj,
            event_type,
            parameters,
            args.broker,
            args.target_service,
            tracker
        )
 def testGetAndValidateSecretParameters(self):
     self._MakeEventType(include_secret_props=True)
     args = self.parser.parse_args(
         ['--secrets=prop0Secret=name:value,prop1Secret=name:value'])
     expected = {
         'prop0Secret': {
             'name': 'name',
             'key': 'value'
         },
         'prop1Secret': {
             'name': 'name',
             'key': 'value'
         }
     }
     self.assertDictEqual(
         expected, flags.GetAndValidateParameters(args, self.event_type))
Exemple #12
0
    def Run(self, args):
        conn_context = connection_context.GetConnectionContext(
            args, serverless_flags.Product.EVENTS, self.ReleaseTrack())

        trigger_ref = args.CONCEPTS.trigger.Parse()
        namespace_ref = trigger_ref.Parent()
        with eventflow_operations.Connect(conn_context) as client:
            if client.IsCluster():
                trigger_ref = resources.REGISTRY.Parse(
                    trigger_ref.RelativeName(),
                    collection=util.ANTHOS_TRIGGER_COLLECTION_NAME,
                    api_version=client.api_version)

                namespace_ref = trigger_ref.Parent()
            if args.custom_type:
                event_type = args.type
                source_obj = None
                tracker_stages = stages.TriggerStages()
            else:
                source_crds = client.ListSourceCustomResourceDefinitions()
                event_type = util.EventTypeFromTypeString(
                    source_crds, args.type, args.source)
                source_obj = source.Source.New(
                    client.client, namespace_ref.Name(),
                    event_type.crd.source_kind,
                    event_type.crd.source_api_category)
                source_obj.name = _SOURCE_NAME_PATTERN.format(
                    trigger=trigger_ref.Name())
                parameters = flags.GetAndValidateParameters(args, event_type)
                tracker_stages = stages.TriggerAndSourceStages()

            trigger_obj = client.GetTrigger(trigger_ref)
            if trigger_obj is not None:
                if args.custom_type:
                    # If custom type, no need to check idempotency since there's only
                    # a trigger to worry about.
                    raise exceptions.TriggerCreationError(
                        'Trigger [{}] already exists.'.format(
                            trigger_obj.name))
                else:
                    # If trigger already exists, validate it has the attributes we're
                    # trying to set right now to see if this is a case of idempotency.
                    try:
                        util.ValidateTrigger(trigger_obj, source_obj,
                                             event_type)
                    except AssertionError:
                        raise exceptions.TriggerCreationError(
                            'Trigger [{}] already exists with attributes not '
                            'matching this event type.'.format(
                                trigger_obj.name))
                    # If the trigger has the right attributes, check if there's already
                    # a source that matches the attributes as well.
                    source_ref = util.GetSourceRef(source_obj.name,
                                                   source_obj.namespace,
                                                   event_type.crd,
                                                   client.IsCluster())
                    if client.GetSource(source_ref,
                                        event_type.crd) is not None:
                        raise exceptions.TriggerCreationError(
                            'Trigger [{}] already exists.'.format(
                                trigger_obj.name))

            # Create the trigger and source
            with progress_tracker.StagedProgressTracker(
                    'Initializing trigger...',
                    tracker_stages,
                    failure_message='Trigger creation failed') as tracker:
                if trigger_obj is None:
                    trigger_obj = client.CreateTrigger(
                        trigger_ref, source_obj,
                        event_type if args.custom_type else event_type.type,
                        args.trigger_filters, args.target_service, args.broker)
                if not args.custom_type:
                    client.CreateSource(source_obj, event_type.crd,
                                        trigger_obj, namespace_ref,
                                        args.broker, parameters)
                    client.PollSource(source_obj, event_type, tracker)
                client.PollTrigger(trigger_ref, tracker)