From e3ecebaf90d476f5dfbb516d02aa537b464d68cc Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Fri, 14 Jul 2023 14:38:43 +0200
Subject: [PATCH] OZG-3880 - add network policy

---
 xta-adapter/run_helm_test.sh                  |   7 +
 .../main/helm/templates/network_policy.yaml   |  68 +++++++++
 .../helm/templates/xta_adapter_cronjob.yaml   |   1 +
 .../src/test/helm/network_policy_test.yaml    | 140 ++++++++++++++++++
 .../helm/xta_adapter_cronjob_basic_test.yaml  |  11 +-
 5 files changed, 226 insertions(+), 1 deletion(-)
 create mode 100755 xta-adapter/run_helm_test.sh
 create mode 100644 xta-adapter/src/main/helm/templates/network_policy.yaml
 create mode 100644 xta-adapter/src/test/helm/network_policy_test.yaml

diff --git a/xta-adapter/run_helm_test.sh b/xta-adapter/run_helm_test.sh
new file mode 100755
index 000000000..9e10b8f0e
--- /dev/null
+++ b/xta-adapter/run_helm_test.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+set -e
+
+helm template  ./src/main/helm/ -f src/main/helm/test-values.yaml
+helm lint -f src/test/helm/values/unit-values.yaml ./src/main/helm/
+cd src/main/helm && helm unittest --helm3 -f '../../test/helm/*.yaml' -v '../../test/helm/values/unit-values.yaml' .
\ No newline at end of file
diff --git a/xta-adapter/src/main/helm/templates/network_policy.yaml b/xta-adapter/src/main/helm/templates/network_policy.yaml
new file mode 100644
index 000000000..23b06bf59
--- /dev/null
+++ b/xta-adapter/src/main/helm/templates/network_policy.yaml
@@ -0,0 +1,68 @@
+#
+# 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.network_policy).disabled }} 
+apiVersion: networking.k8s.io/v1
+kind: NetworkPolicy
+metadata:
+  name: network-policy-xta-adapter
+  namespace: {{ .Release.Namespace }} 
+spec:
+  podSelector:
+    matchLabels:
+      ozg-component: xta-adapter
+  policyTypes:
+    - Egress
+  egress:
+  - to:
+    - podSelector: 
+        matchLabels:
+          component: pluto
+    ports:
+      - port: 9090
+        protocol: TCP
+  - to:
+    - namespaceSelector:
+        matchLabels:
+          kubernetes.io/metadata.name: kube-system
+      podSelector:
+        matchLabels:
+          k8s-app: kube-dns
+    ports:
+      - port: 53
+        protocol: UDP
+      - port: 53
+        protocol: TCP
+  - to:
+    - namespaceSelector:
+        matchLabels:
+          kubernetes.io/metadata.name: ssh-port-forward
+      ports:
+      - port: 9000
+        protocol: TCP
+  {{- with (.Values.network_policy).additional_egress_config }}
+  - to:
+{{ toYaml . | indent 8 }}
+  {{- end }}
+{{- end }} 
\ No newline at end of file
diff --git a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml
index 47aa8cd89..371dda541 100644
--- a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml
+++ b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml
@@ -42,6 +42,7 @@ spec:
         metadata:
           labels:
             workload: xta-adapter-cronjob
+            ozg-component: xta-adapter
         spec:
           restartPolicy: Never
           containers:
diff --git a/xta-adapter/src/test/helm/network_policy_test.yaml b/xta-adapter/src/test/helm/network_policy_test.yaml
new file mode 100644
index 000000000..57768dbce
--- /dev/null
+++ b/xta-adapter/src/test/helm/network_policy_test.yaml
@@ -0,0 +1,140 @@
+#
+# 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.
+#
+
+suite: network policy test
+release:
+  namespace: by-helm-test
+templates:
+  - templates/network_policy.yaml
+tests:
+  - it: should match apiVersion
+    asserts:
+      - isAPIVersion:
+          of: networking.k8s.io/v1
+  - it: should match kind
+    asserts:
+      - isKind:
+          of: NetworkPolicy
+  - it: validate metadata
+    asserts:
+      - equal:
+          path: metadata
+          value:
+            name: network-policy-xta-adapter
+            namespace: by-helm-test
+  - it: validate spec
+    asserts:
+      - equal:
+          path: spec
+          value:
+            podSelector:
+              matchLabels:
+                ozg-component: xta-adapter
+            policyTypes:
+              - Egress
+            egress:
+            - to:
+              - podSelector: 
+                  matchLabels:
+                    component: pluto
+              ports:
+                - port: 9090
+                  protocol: TCP
+            - to:
+              - namespaceSelector:
+                  matchLabels:
+                    kubernetes.io/metadata.name: kube-system
+                podSelector:
+                  matchLabels:
+                    k8s-app: kube-dns
+              ports:
+                - port: 53
+                  protocol: UDP
+                - port: 53
+                  protocol: TCP
+            - to:
+              - namespaceSelector:
+                  matchLabels:
+                    kubernetes.io/metadata.name: ssh-port-forward
+                ports:
+                - port: 9000
+                  protocol: TCP
+
+  - it: add ingress rule by values
+    set:
+      network_policy:
+        additional_egress_config:
+        - podSelector: 
+            matchLabels:
+              component: client2
+    asserts:
+      - equal:
+          path: spec.egress
+          value:
+            - to:
+              - podSelector: 
+                  matchLabels:
+                    component: pluto
+              ports:
+                - port: 9090
+                  protocol: TCP
+            - to:
+              - namespaceSelector:
+                  matchLabels:
+                    kubernetes.io/metadata.name: kube-system
+                podSelector:
+                  matchLabels:
+                    k8s-app: kube-dns
+              ports:
+                - port: 53
+                  protocol: UDP
+                - port: 53
+                  protocol: TCP
+            - to:
+              - namespaceSelector:
+                  matchLabels:
+                    kubernetes.io/metadata.name: ssh-port-forward
+                ports:
+                - port: 9000
+                  protocol: TCP
+            - to:
+              - podSelector: 
+                  matchLabels:
+                    component: client2
+
+  - it: test network policy disabled
+    set:
+      network_policy:
+        disabled: true
+    asserts:
+      - hasDocuments:
+          count: 0
+
+  - it: test network policy unset should be disabled
+    set:
+      network_policy:
+        disabled: false
+    asserts:
+      - hasDocuments:
+          count: 1
\ No newline at end of file
diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml
index 3e0ec759c..ba879bf70 100644
--- a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml
+++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml
@@ -99,4 +99,13 @@ tests:
         value: false
     - equal:
         path: spec.jobTemplate.spec.template.spec.containers[0].securityContext.runAsNonRoot
-        value: false
\ No newline at end of file
+        value: false
+  
+  - it: check pod labels
+    template: xta_adapter_cronjob.yaml
+    asserts:
+    - equal:
+        path: spec.jobTemplate.spec.template.metadata.labels
+        value: 
+          ozg-component: xta-adapter
+          workload: xta-adapter-cronjob
-- 
GitLab