# Licensed to 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. Apache Software Foundation (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.

# This kustomization.yaml is not intended to be run by itself,
# since it depends on service name and namespace that are out of this kustomize package.
# It should be run by config/default
resources:
- bases/operator.skywalking.apache.org_oapservers.yaml
- bases/operator.skywalking.apache.org_uis.yaml
- bases/operator.skywalking.apache.org_fetchers.yaml
# +kubebuilder:scaffold:crdkustomizeresource

patchesStrategicMerge:
- patches/webhook_in_oapservers.yaml
- patches/cainjection_in_oapservers.yaml
- patches/webhook_in_uis.yaml
- patches/cainjection_in_uis.yaml
- patches/webhook_in_fetchers.yaml
- patches/cainjection_in_fetchers.yaml

# the following config is for teaching kustomize how to do kustomization for CRDs.
configurations:
- kustomizeconfig.yaml
