#
# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
# Ministerpräsidenten des Landes Schleswig-Holstein
# Staatskanzlei
# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
#
# Lizenziert unter der EUPL, Version 1.2 oder - sobald
# diese von der Europäischen Kommission genehmigt wurden -
# Folgeversionen der EUPL ("Lizenz");
# Sie dürfen dieses Werk ausschließlich gemäß
# dieser Lizenz nutzen.
# Eine Kopie der Lizenz finden Sie hier:
#
# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
#
# Sofern nicht durch anwendbare Rechtsvorschriften
# gefordert oder in schriftlicher Form vereinbart, wird
# die unter der Lizenz verbreitete Software "so wie sie
# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
# ausdrücklich oder stillschweigend - verbreitet.
# Die sprachspezifischen Genehmigungen und Beschränkungen
# unter der Lizenz sind dem Lizenztext zu entnehmen.
#

{{- if not (.Values.networkPolicy).disabled }}
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy-vorgang-manager
  namespace: {{ .Release.Namespace }}
spec:
  podSelector:
    matchLabels:
      component: vorgang-manager
  policyTypes:
    - Ingress
    - Egress
  ingress:
  - ports:
    - port: 9090
    from:
    - podSelector:
        matchLabels:
          component: alfa
    - podSelector:
        matchLabels:
          ozg-component: eingangsadapter
    - podSelector:
        matchLabels:
          ozg-component: xta-adapter
{{- if ((.Values.ozgcloud).aggregationManager).enabled }}
  - from:
    - podSelector:
        matchLabels:
          component: aggregation-manager
    ports:
    - protocol: TCP
      port: 9090
{{- end }}
  - from:
    - namespaceSelector:
        matchLabels:
          name: {{ (.Values.networkPolicy).monitoringNamespace | default "openshift-user-workload-monitoring" }}
    ports:
    - protocol: TCP
      port: 8081
{{- if ((.Values.ozgcloud).antragraum).enabled }}
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: {{((.Values.ozgcloud).antragraum).antragraumProxyNamespace | default "antragraum-proxy"}}
      podSelector:
        matchLabels:
          component: antragraum-proxy
{{- end }}

  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: {{ (.Values.networkPolicy).zentralerEingangNamespace }}
      podSelector:
        matchExpressions:
          - key: ozg-component
            operator: In
            values:
              - eingangsadapter
              - xta-adapter
    ports:
    - protocol: TCP
      port: 9090

{{- with (.Values.networkPolicy).additionalIngressConfigLocal }}
{{ toYaml . | indent 2 }}
{{- end }}
{{- with (.Values.networkPolicy).additionalIngressConfigGlobal }}
{{ toYaml . | indent 2 }}
{{- end }}
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: elastic-system
      podSelector:
        matchLabels:
          elasticsearch.k8s.elastic.co/cluster-name : ozg-search-cluster
    ports:
      - port: 9200
        protocol: TCP
  - to:
    - podSelector:
        matchLabels:
          component: ozgcloud-mongodb
    ports:
      - port: 27017
        protocol: TCP
  - to:
    - podSelector:
        matchLabels:
          component: user-manager
    ports:
      - port: 9000
        protocol: TCP
{{- if ((.Values.ozgcloud).bayernid).enabled }}
  - to:
    - podSelector:
        matchLabels:
          component: bayernid-proxy
      namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: {{ required "ozgcloud.bayernid.proxy.namespace must be set if bayernid is enabled" (((.Values.ozgcloud).bayernid).proxy).namespace }}
    ports:
      - port: 9090
        protocol: TCP
{{- end }}
{{- if ((.Values.ozgcloud).antragraum).enabled }}
  - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: {{((.Values.ozgcloud).infoManager).namespace | default "info-manager"}}
        podSelector:
          matchLabels:
            component: info-manager
{{- end }}
{{- if (.Values.zufiManager).enabled }}
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: {{ required "zufiManager.namespace must be set if zufiManager server is enabled" (.Values.zufiManager).namespace }}
      podSelector:
        matchLabels:
          component: zufi-server
    ports:
      - port: 9090
        protocol: TCP
{{- end }}
{{- if (.Values.forwarding).enabled }}
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: {{ required "forwarding.namespace must be set if forwarding is enabled" (.Values.forwarding).namespace }}
      podSelector:
        matchLabels:
          component: {{ required "forwarding.serviceName must be set if forwarding is enabled" (.Values.forwarding).serviceName }}
    ports:
      - port: 9090
        protocol: TCP
{{- end }}
{{- if ((.Values.ozgcloud).muk).enabled }}
  - to:
    - podSelector:
        matchLabels:
          app.kubernetes.io/name: {{ (((.Values.ozgcloud).muk).elsterTransfer).name }}
      namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: {{ required "ozgcloud.muk.elsterTransfer.namespace must be set if muk is enabled" (((.Values.ozgcloud).muk).elsterTransfer).namespace }}
    ports:
      - protocol: TCP
        port: 8081
{{- end }}
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: {{ required "networkPolicy.dnsServerNamespace must be set" (.Values.networkPolicy).dnsServerNamespace }}
    ports:
      - port: 53
        protocol: UDP
      - port: 53
        protocol: TCP
      - port: 5353
        protocol: UDP
      - port: 5353
        protocol: TCP
{{- with (.Values.networkPolicy).additionalEgressConfigLocal }}
{{ toYaml . | indent 2 }}
{{- end }}
{{- with (.Values.networkPolicy).additionalEgressConfigGlobal }}
{{ toYaml . | indent 2 }}
{{- end }}

{{- end }}