# 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
- bases/operator.skywalking.apache.org_storages.yaml
- bases/operator.skywalking.apache.org_javaagents.yaml
- bases/operator.skywalking.apache.org_satellites.yaml
- bases/operator.skywalking.apache.org_oapserverconfigs.yaml
- bases/operator.skywalking.apache.org_oapserverdynamicconfigs.yaml
#+kubebuilder:scaffold:crdkustomizeresource

patchesStrategicMerge:
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
# patches here are for enabling the conversion webhook for each CRD
- patches/webhook_in_oapservers.yaml
- patches/webhook_in_uis.yaml
- patches/webhook_in_fetchers.yaml
- patches/webhook_in_storages.yaml
- patches/webhook_in_javaagents.yaml
- patches/webhook_in_satellites.yaml
- patches/webhook_in_oapserverconfigs.yaml
#- patches/webhook_in_oapserverdynamicconfigs.yaml
#+kubebuilder:scaffold:crdkustomizewebhookpatch

# [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix.
# patches here are for enabling the CA injection for each CRD
- patches/cainjection_in_oapservers.yaml
- patches/cainjection_in_uis.yaml
- patches/cainjection_in_fetchers.yaml
- patches/cainjection_in_storages.yaml
- patches/cainjection_in_javaagents.yaml
- patches/cainjection_in_satellites.yaml
- patches/cainjection_in_oapserverconfigs.yaml
#- patches/cainjection_in_oapserverdynamicconfigs.yaml
#+kubebuilder:scaffold:crdkustomizecainjectionpatch

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