# ---------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ---------------------------------------------------------------------------

apiVersion: camel.apache.org/v1
kind: Kamelet
metadata:
  name: log-sink
  annotations:
    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,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"
  labels:
    camel.apache.org/kamelet.type: "sink"
spec:
  definition:
    title: "Log Sink"
    description: "Consume events from a channel"
  template:
    from:
      uri: kamelet:source
      steps:
        - to: "log:sink"
