{{/*
# Copyright © 2020 Orange
#
# Licensed 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.
*/}}

{{-   $dot := . -}}
{{- range $role_type := $dot.Values.roles }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: {{ include "common.fullname" (dict "suffix" $role_type "dot" $dot )}}
  namespace: {{ include "common.namespace" $dot }}
rules:
{{- if eq $role_type "read" }}
- apiGroups:
  - "" # "" indicates the core API group
  - apps
  - batch
  resources:
  - pods
  - deployments
  - jobs
  - jobs/status
  - statefulsets
  - replicasets
  - daemonsets
  verbs:
  - get
  - watch
  - list
{{- else  }}
{{-   if eq $role_type "create" }}
- apiGroups:
  - "" # "" indicates the core API group
  - apps
  - batch
  resources:
  - pods
  - deployments
  - jobs
  - jobs/status
  - statefulsets
  - replicasets
  - daemonsets
  - secrets
  verbs:
  - get
  - watch
  - list
- apiGroups:
  - "" # "" indicates the core API group
  - apps
  resources:
  - statefulsets
  verbs:
  - patch
- apiGroups:
  - "" # "" indicates the core API group
  - apps
  resources:
  - deployments
  - secrets
  verbs:
  - create
- apiGroups:
  - "" # "" indicates the core API group
  - apps
  resources:
  - pods
  - persistentvolumeclaims
  - secrets
  - deployment
  verbs:
  - delete
- apiGroups:
  - "" # "" indicates the core API group
  - apps
  resources:
  - pods/exec
  verbs:
  - create
{{-   else }}
{{-     if hasKey $dot.Values.new_roles_definitions $role_type  }}
{{ include "common.tplValue" ( dict "value" (index $dot.Values.new_roles_definitions $role_type ) "context" $dot) }}
{{-     else}}
# if you don't match read or create, then you're not allowed to use API
- apiGroups: []
  resources: []
  verbs: []
{{-     end }}
{{-   end }}
{{- end }}
{{- end }}
