# 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.

{{- $configuration := config }}
apiVersion: operator.skywalking.apache.org/v1alpha1
kind: JavaAgent
metadata:
  name: {{SelectorName}}-javaagent
  namespace: {{Namespace}}
  labels:
    {{labelKey}}: {{labelValue}}
  ownerReferences:
  - apiVersion: {{ownerReference.APIVersion}}
    blockOwnerDeletion: {{ownerReference.BlockOwnerDeletion}}
    controller: {{ownerReference.Controller}}
    kind: {{ownerReference.Kind}}
    name: {{ownerReference.Name}}
    uid: {{ownerReference.UID}}
spec:
  podSelector: {{PodSelector}}
  serviceName: {{ServiceName}}
  backendService: {{BackendService}}
  agentConfiguration: 
  {{ range $key, $value := $configuration }}
    {{$key}}: {{$value}}
  {{- end -}}