5g core control plane helm charts and 5g Ran simulator helm charts

Change-Id: I4201ec10d796c1aa8f21679f99fbb790e414d97a
diff --git a/omec/5g-control-plane/templates/NOTES.txt b/omec/5g-control-plane/templates/NOTES.txt
new file mode 100644
index 0000000..fb2a925
--- /dev/null
+++ b/omec/5g-control-plane/templates/NOTES.txt
@@ -0,0 +1,9 @@
+{{- /*
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+*/ -}}
+
+Notes - Instructions to use 5g helm charts
diff --git a/omec/5g-control-plane/templates/_helpers.tpl b/omec/5g-control-plane/templates/_helpers.tpl
new file mode 100644
index 0000000..87f1ec6
--- /dev/null
+++ b/omec/5g-control-plane/templates/_helpers.tpl
@@ -0,0 +1,115 @@
+{{- /*
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+*/ -}}
+
+{{/*
+Renders a set of standardised labels
+*/}}
+{{- define "5g-control-plane.metadata_labels" -}}
+{{- $application := index . 0 -}}
+{{- $context := index . 1 -}}
+release: {{ $context.Release.Name }}
+app: {{ $application }}
+{{- end -}}
+
+{{/*
+Render the given template.
+*/}}
+{{- define "5g-control-plane.template" -}}
+{{- $name := index . 0 -}}
+{{- $context := index . 1 -}}
+{{- $last := base $context.Template.Name }}
+{{- $wtf := $context.Template.Name | replace $last $name -}}
+{{ include $wtf $context }}
+{{- end -}}
+
+{{/*
+Render ServiceAccount, Role, and RoleBinding required for kubernetes-entrypoint.
+*/}}
+{{- define "5g-control-plane.service_account" -}}
+{{- $context := index . 1 -}}
+{{- $saName := index . 0 -}}
+{{- $saNamespace := $context.Release.Namespace }}
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ $saName }}
+  namespace: {{ $saNamespace }}
+  labels:
+{{ tuple $saName $context | include "5g-control-plane.metadata_labels" | indent 4 }}
+---
+{{- if semverCompare ">=1.16-0" $context.Capabilities.KubeVersion.GitVersion }}
+apiVersion: rbac.authorization.k8s.io/v1
+{{- else }}
+apiVersion: rbac.authorization.k8s.io/v1beta1
+{{- end }}
+kind: RoleBinding
+metadata:
+  name: {{ $saName }}
+  namespace: {{ $saNamespace }}
+  labels:
+{{ tuple $saName $context | include "5g-control-plane.metadata_labels" | indent 4 }}
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: {{ $saName }}
+subjects:
+  - kind: ServiceAccount
+    name: {{ $saName }}
+    namespace: {{ $saNamespace }}
+---
+{{- if semverCompare ">=1.16-0" $context.Capabilities.KubeVersion.GitVersion }}
+apiVersion: rbac.authorization.k8s.io/v1
+{{- else }}
+apiVersion: rbac.authorization.k8s.io/v1beta1
+{{- end }}
+kind: Role
+metadata:
+  name: {{ $saName }}
+  namespace: {{ $saNamespace }}
+  labels:
+{{ tuple $saName $context | include "5g-control-plane.metadata_labels" | indent 4 }}
+rules:
+  - apiGroups:
+      - ""
+      - extensions
+      - batch
+      - apps
+    verbs:
+      - get
+      - list
+      - patch
+    resources:
+      - statefulsets
+      - daemonsets
+      - jobs
+      - pods
+      - services
+      - endpoints
+      - configmaps
+{{- end -}}
+
+{{/*
+Render init container for coredump.
+*/}}
+{{- define "5g-control-plane.coredump_init" -}}
+{{- $pod := index . 0 -}}
+{{- $context := index . 1 -}}
+- name: {{ $pod }}-coredump-init
+  image: {{ $context.Values.images.tags.init | quote }}
+  imagePullPolicy: {{ $context.Values.images.pullPolicy }}
+  securityContext:
+    privileged: true
+    runAsUser: 0
+  command: ["bash", "-xc"]
+  args:
+    - echo '/tmp/coredump/core.%h.%e.%t' > /mnt/host-rootfs/proc/sys/kernel/core_pattern
+  volumeMounts:
+    - name: host-rootfs
+      mountPath: /mnt/host-rootfs
+{{- end -}}
diff --git a/omec/5g-control-plane/templates/bin/_amf-run.sh.tpl b/omec/5g-control-plane/templates/bin/_amf-run.sh.tpl
new file mode 100644
index 0000000..07c6de7
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_amf-run.sh.tpl
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/amf/amf /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/amfcfg.conf
+cat /etc/hosts
+cp /free5gc/config/amfcfg.conf /tmp/amfcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/amfcfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/amfcfg.conf
+./amf/amf -amfcfg /tmp/amfcfg.conf 
diff --git a/omec/5g-control-plane/templates/bin/_ausf-run.sh.tpl b/omec/5g-control-plane/templates/bin/_ausf-run.sh.tpl
new file mode 100644
index 0000000..9273615
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_ausf-run.sh.tpl
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/ausf/ausf /tmp/coredump/
+{{- end }}
+
+
+cd /free5gc
+#print config files
+cat ./config/free5GC.conf
+cat ./config/ausfcfg.conf
+cp /free5gc/config/ausfcfg.conf /tmp/ausfcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/ausfcfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/ausfcfg.conf
+./ausf/ausf -ausfcfg /tmp/ausfcfg.conf
diff --git a/omec/5g-control-plane/templates/bin/_nrf-run.sh.tpl b/omec/5g-control-plane/templates/bin/_nrf-run.sh.tpl
new file mode 100644
index 0000000..af38ace
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_nrf-run.sh.tpl
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/nrf/nrf /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/nrfcfg.conf
+cat /etc/hosts
+cp /free5gc/config/nrfcfg.conf /tmp/nrfcfg.conf
+sed -i "s/nrf.free5gc.org/${POD_IP}/g" /tmp/nrfcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/nrfcfg.conf
+./nrf/nrf -nrfcfg /tmp/nrfcfg.conf
diff --git a/omec/5g-control-plane/templates/bin/_nssf-run.sh.tpl b/omec/5g-control-plane/templates/bin/_nssf-run.sh.tpl
new file mode 100644
index 0000000..04247eb
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_nssf-run.sh.tpl
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/nssf/nssf /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/nssfcfg.conf
+cat /etc/hosts
+cp /free5gc/config/nssfcfg.conf /tmp/nssfcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/nssfcfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/nssfcfg.conf
+./nssf/nssf -nssfcfg /tmp/nssfcfg.conf 
diff --git a/omec/5g-control-plane/templates/bin/_pcf-run.sh.tpl b/omec/5g-control-plane/templates/bin/_pcf-run.sh.tpl
new file mode 100644
index 0000000..1d11de4
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_pcf-run.sh.tpl
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/pcf/pcf /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/pcfcfg.conf
+cat /etc/hosts
+cp /free5gc/config/pcfcfg.conf /tmp/pcfcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/pcfcfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/pcfcfg.conf
+./pcf/pcf -pcfcfg /tmp/pcfcfg.conf 
diff --git a/omec/5g-control-plane/templates/bin/_smf-run.sh.tpl b/omec/5g-control-plane/templates/bin/_smf-run.sh.tpl
new file mode 100644
index 0000000..f4b95b9
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_smf-run.sh.tpl
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/smf/smf /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/smfcfg.conf
+cat ./config/uerouting.yaml
+cat /etc/hosts
+cp /free5gc/config/smfcfg.conf /tmp/smfcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/smfcfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/smfcfg.conf
+./smf/smf -smfcfg /tmp/smfcfg.conf -uerouting ./config/uerouting.yaml
diff --git a/omec/5g-control-plane/templates/bin/_udm-run.sh.tpl b/omec/5g-control-plane/templates/bin/_udm-run.sh.tpl
new file mode 100644
index 0000000..617d868
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_udm-run.sh.tpl
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/udm/udm /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/udmcfg.conf
+cat /etc/hosts
+cp /free5gc/config/udmcfg.conf /tmp/udmcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/udmcfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/udmcfg.conf
+./udm/udm -udmcfg /tmp/udmcfg.conf 
diff --git a/omec/5g-control-plane/templates/bin/_udr-run.sh.tpl b/omec/5g-control-plane/templates/bin/_udr-run.sh.tpl
new file mode 100644
index 0000000..dee769c
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_udr-run.sh.tpl
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/udr/udr /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/udrcfg.conf
+cat /etc/hosts
+cp /free5gc/config/udrcfg.conf /tmp/udrcfg.conf
+sed -i "s/POD_IP/${POD_IP}/g" /tmp/udrcfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/udrcfg.conf
+./udr/udr -udrcfg /tmp/udrcfg.conf 
diff --git a/omec/5g-control-plane/templates/bin/_webui-run.sh.tpl b/omec/5g-control-plane/templates/bin/_webui-run.sh.tpl
new file mode 100644
index 0000000..1309bb6
--- /dev/null
+++ b/omec/5g-control-plane/templates/bin/_webui-run.sh.tpl
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Copyright 2020-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+set -xe
+
+{{- if .Values.config.coreDump.enabled }}
+cp /free5gc/webconsole/webui /tmp/coredump/
+{{- end }}
+
+#cat config files
+
+cd /free5gc
+cat ./config/free5GC.conf
+cat ./config/webuicfg.conf
+cat /etc/hosts
+cp /free5gc/config/webuicfg.conf /tmp/webuicfg.conf
+NRF_ADDR=$(dig +short nrf.omec.svc.cluster.local)
+sed -i "s/nrf.free5gc.org/${NRF_ADDR}/g" /tmp/webuicfg.conf
+./webconsole/webui 
diff --git a/omec/5g-control-plane/templates/configmap-amf.yaml b/omec/5g-control-plane/templates/configmap-amf.yaml
new file mode 100644
index 0000000..617818e
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-amf.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.amf.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: amf
+  labels:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  amf-run.sh: |
+{{ tuple "bin/_amf-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.amf.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-ausf.yaml b/omec/5g-control-plane/templates/configmap-ausf.yaml
new file mode 100644
index 0000000..5dc0f98
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-ausf.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.ausf.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: ausf
+  labels:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  ausf-run.sh: |
+{{ tuple "bin/_ausf-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.ausf.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-nrf.yaml b/omec/5g-control-plane/templates/configmap-nrf.yaml
new file mode 100644
index 0000000..bc15b65
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-nrf.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.nrf.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nrf
+  labels:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  nrf-run.sh: |
+{{ tuple "bin/_nrf-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.nrf.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-nssf.yaml b/omec/5g-control-plane/templates/configmap-nssf.yaml
new file mode 100644
index 0000000..f0e3193
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-nssf.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.nssf.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nssf
+  labels:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  nssf-run.sh: |
+{{ tuple "bin/_nssf-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.nssf.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-pcf.yaml b/omec/5g-control-plane/templates/configmap-pcf.yaml
new file mode 100644
index 0000000..2fc4dd7
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-pcf.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.pcf.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: pcf
+  labels:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  pcf-run.sh: |
+{{ tuple "bin/_pcf-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.pcf.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-smf.yaml b/omec/5g-control-plane/templates/configmap-smf.yaml
new file mode 100644
index 0000000..b1261ff
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-smf.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.smf.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: smf
+  labels:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  smf-run.sh: |
+{{ tuple "bin/_smf-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.smf.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-udm.yaml b/omec/5g-control-plane/templates/configmap-udm.yaml
new file mode 100644
index 0000000..5c2a3df
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-udm.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.udm.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: udm
+  labels:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  udm-run.sh: |
+{{ tuple "bin/_udm-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.udm.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-udr.yaml b/omec/5g-control-plane/templates/configmap-udr.yaml
new file mode 100644
index 0000000..667b23d
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-udr.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.udr.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: udr
+  labels:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  udr-run.sh: |
+{{ tuple "bin/_udr-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.udr.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/configmap-webui.yaml b/omec/5g-control-plane/templates/configmap-webui.yaml
new file mode 100644
index 0000000..9197644
--- /dev/null
+++ b/omec/5g-control-plane/templates/configmap-webui.yaml
@@ -0,0 +1,22 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.webui.deploy }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: webui
+  labels:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+data:
+  webui-run.sh: |
+{{ tuple "bin/_webui-run.sh.tpl" . | include "5g-control-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.webui.yamlCfgFiles }}
+  {{ $key }}: |-
+{{ toYaml $value | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/deployment-webui.yaml b/omec/5g-control-plane/templates/deployment-webui.yaml
new file mode 100644
index 0000000..a01138e
--- /dev/null
+++ b/omec/5g-control-plane/templates/deployment-webui.yaml
@@ -0,0 +1,89 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.webui.deploy }}
+{{ tuple "webui" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: webui
+  labels:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.webui.podAnnotations }}
+      annotations:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.webui.label }}: {{ .Values.nodeSelectors.webui.value }}
+    {{- end }}
+      serviceAccountName: webui
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "webui" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: webui
+        image: {{ .Values.images.tags.webui }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/webui-run.sh"]
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.webui | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/webui-run.sh
+          subPath: webui-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: webui
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: webui
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-amf.yaml b/omec/5g-control-plane/templates/service-amf.yaml
new file mode 100644
index 0000000..2330411
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-amf.yaml
@@ -0,0 +1,72 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.amf.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: amf
+  labels:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: prometheus-exporter
+    port: {{ .Values.config.amf.prometheus.port }}
+    protocol: TCP
+  - name: sbi
+    port: {{ .Values.config.amf.sbi.port }}
+    protocol: TCP
+  - name: ngapp
+    port: {{ .Values.config.amf.ngapp.port }}
+    protocol: SCTP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: amf-headless
+  labels:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.amf.prometheus.nodePort.enabled .Values.config.amf.sbi.nodePort.enabled .Values.config.amf.ngapp.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: amf-external
+  labels:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.amf.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.amf.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.amf.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.amf.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.amf.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.amf.sbi.nodePort.port }}
+{{- end }}
+{{- if .Values.config.amf.ngapp.nodePort.enabled }}
+  - name: ngapp
+    port: {{ .Values.config.amf.ngapp.port }}
+    protocol: SCTP
+    nodePort: {{ .Values.config.amf.ngapp.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-ausf.yaml b/omec/5g-control-plane/templates/service-ausf.yaml
new file mode 100644
index 0000000..c06af07
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-ausf.yaml
@@ -0,0 +1,63 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.ausf.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: ausf
+  labels:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: prometheus-exporter
+    port: {{ .Values.config.ausf.prometheus.port }}
+    protocol: TCP
+  - name: sbi
+    port: {{ .Values.config.ausf.sbi.port }}
+    protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: ausf-headless
+  labels:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.ausf.prometheus.nodePort.enabled .Values.config.ausf.sbi.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: ausf-external
+  labels:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.ausf.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.ausf.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.ausf.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.ausf.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.ausf.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.ausf.sbi.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-nrf.yaml b/omec/5g-control-plane/templates/service-nrf.yaml
new file mode 100644
index 0000000..efee971
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-nrf.yaml
@@ -0,0 +1,54 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.nrf.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: nrf
+  labels:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: sbi
+    port: {{ .Values.config.nrf.sbi.port }}
+    protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: nrf-headless
+  labels:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.nrf.sbi.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: nrf-external
+  labels:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.nrf.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.nrf.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.nrf.sbi.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-nssf.yaml b/omec/5g-control-plane/templates/service-nssf.yaml
new file mode 100644
index 0000000..a709cc2
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-nssf.yaml
@@ -0,0 +1,63 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.nssf.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: nssf
+  labels:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: prometheus-exporter
+    port: {{ .Values.config.nssf.prometheus.port }}
+    protocol: TCP
+  - name: sbi
+    port: {{ .Values.config.nssf.sbi.port }}
+    protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: nssf-headless
+  labels:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.nssf.prometheus.nodePort.enabled .Values.config.nssf.sbi.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: nssf-external
+  labels:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.nssf.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.nssf.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.nssf.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.nssf.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.nssf.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.nssf.sbi.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-pcf.yaml b/omec/5g-control-plane/templates/service-pcf.yaml
new file mode 100644
index 0000000..bfb0e05
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-pcf.yaml
@@ -0,0 +1,63 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.pcf.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: pcf
+  labels:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: prometheus-exporter
+    port: {{ .Values.config.pcf.prometheus.port }}
+    protocol: TCP
+  - name: sbi
+    port: {{ .Values.config.pcf.sbi.port }}
+    protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: pcf-headless
+  labels:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.pcf.prometheus.nodePort.enabled .Values.config.pcf.sbi.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: pcf-external
+  labels:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.pcf.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.pcf.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.pcf.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.pcf.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.pcf.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.pcf.sbi.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-smf.yaml b/omec/5g-control-plane/templates/service-smf.yaml
new file mode 100644
index 0000000..467c2ea
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-smf.yaml
@@ -0,0 +1,72 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.smf.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: smf
+  labels:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: pfcp
+    port: {{ .Values.config.smf.n4.port }}
+    protocol: UDP
+  - name: prometheus-exporter
+    port: {{ .Values.config.smf.prometheus.port }}
+    protocol: TCP
+  - name: sbi
+    port: {{ .Values.config.smf.sbi.port }}
+    protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: smf-headless
+  labels:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.smf.n4.nodePort.enabled .Values.config.smf.prometheus.nodePort.enabled .Values.config.smf.sbi.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: smf-external
+  labels:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.smf.n4.nodePort.enabled }}
+  - name: pfcp
+    port: {{ .Values.config.smf.n4.port }}
+    protocol: UDP
+    nodePort: {{ .Values.config.smf.n4.nodePort.port }}
+{{- end }}
+{{- if .Values.config.smf.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.smf.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.smf.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.smf.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.smf.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.smf.sbi.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-udm.yaml b/omec/5g-control-plane/templates/service-udm.yaml
new file mode 100644
index 0000000..d3c47d0
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-udm.yaml
@@ -0,0 +1,63 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.udm.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: udm
+  labels:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: prometheus-exporter
+    port: {{ .Values.config.udm.prometheus.port }}
+    protocol: TCP
+  - name: sbi
+    port: {{ .Values.config.udm.sbi.port }}
+    protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: udm-headless
+  labels:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.udm.prometheus.nodePort.enabled .Values.config.udm.sbi.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: udm-external
+  labels:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.udm.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.udm.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.udm.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.udm.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.udm.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.udm.sbi.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-udr.yaml b/omec/5g-control-plane/templates/service-udr.yaml
new file mode 100644
index 0000000..0dc4720
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-udr.yaml
@@ -0,0 +1,63 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.udr.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: udr
+  labels:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: prometheus-exporter
+    port: {{ .Values.config.udr.prometheus.port }}
+    protocol: TCP
+  - name: sbi
+    port: {{ .Values.config.udr.sbi.port }}
+    protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: udr-headless
+  labels:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.udr.prometheus.nodePort.enabled .Values.config.udr.sbi.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: udr-external
+  labels:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.udr.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.udr.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.udr.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.udr.sbi.nodePort.enabled }}
+  - name: sbi
+    port: {{ .Values.config.udr.sbi.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.udr.sbi.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/service-webui.yaml b/omec/5g-control-plane/templates/service-webui.yaml
new file mode 100644
index 0000000..72457ba
--- /dev/null
+++ b/omec/5g-control-plane/templates/service-webui.yaml
@@ -0,0 +1,61 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.webui.deploy }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: webui
+  labels:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: ClusterIP
+  selector:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+  - name: prometheus-exporter
+    port: {{ .Values.config.webui.prometheus.port }}
+    protocol: TCP
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: webui-headless
+  labels:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  clusterIP: None
+  selector:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+{{- if or .Values.config.webui.prometheus.nodePort.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: webui-external
+  labels:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  type: NodePort
+  selector:
+{{ tuple "webui" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+  ports:
+{{- if .Values.config.webui.prometheus.nodePort.enabled }}
+  - name: prometheus-exporter
+    port: {{ .Values.config.webui.prometheus.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.webui.prometheus.nodePort.port }}
+{{- end }}
+{{- if .Values.config.webui.urlport.nodePort.enabled }}
+  - name: urlport-http
+    port: {{ .Values.config.webui.urlport.port }}
+    protocol: TCP
+    nodePort: {{ .Values.config.webui.urlport.nodePort.port }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-amf.yaml b/omec/5g-control-plane/templates/statefulset-amf.yaml
new file mode 100644
index 0000000..b410e4a
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-amf.yaml
@@ -0,0 +1,95 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.amf.deploy }}
+{{ tuple "amf" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: amf
+  labels:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: amf-headless
+  selector:
+    matchLabels:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "amf" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.amf.podAnnotations }}
+      annotations:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.amf.label }}: {{ .Values.nodeSelectors.amf.value }}
+    {{- end }}
+      serviceAccountName: amf
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "amf" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: amf
+        image: {{ .Values.images.tags.amf }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/amf-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.amf | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/amf-run.sh
+          subPath: amf-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: amf
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: amf
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-ausf.yaml b/omec/5g-control-plane/templates/statefulset-ausf.yaml
new file mode 100644
index 0000000..2293c3b
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-ausf.yaml
@@ -0,0 +1,97 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.ausf.deploy }}
+{{ tuple "ausf" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: ausf
+  labels:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: ausf-headless
+  selector:
+    matchLabels:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "ausf" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.ausf.podAnnotations }}
+      annotations:
+        helm.sh/hook: pre-install
+        helm.sh/hook-weight: "5"
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.ausf.label }}: {{ .Values.nodeSelectors.ausf.value }}
+    {{- end }}
+      serviceAccountName: ausf
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module2
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "ausf" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: ausf
+        image: {{ .Values.images.tags.ausf }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/ausf-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.ausf | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/ausf-run.sh
+          subPath: ausf-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: ausf
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: ausf
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-nrf.yaml b/omec/5g-control-plane/templates/statefulset-nrf.yaml
new file mode 100644
index 0000000..44683f8
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-nrf.yaml
@@ -0,0 +1,93 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.nrf.deploy }}
+{{ tuple "nrf" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: nrf
+  labels:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: nrf-headless
+  selector:
+    matchLabels:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "nrf" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.nrf.podAnnotations }}
+      annotations:
+        helm.sh/hook: pre-install
+        helm.sh/hook-weight: "2"
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.nrf.label }}: {{ .Values.nodeSelectors.nrf.value }}
+    {{- end }}
+      serviceAccountName: nrf
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+    {{- if .Values.config.coreDump.enabled }}
+      initContainers:
+{{ tuple "nrf" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: nrf
+        image: {{ .Values.images.tags.nrf }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/nrf-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.nrf | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/nrf-run.sh
+          subPath: nrf-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: nrf
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: nrf
+          defaultMode: 493
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-nssf.yaml b/omec/5g-control-plane/templates/statefulset-nssf.yaml
new file mode 100644
index 0000000..21057f7
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-nssf.yaml
@@ -0,0 +1,95 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.nssf.deploy }}
+{{ tuple "nssf" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: nssf
+  labels:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: nssf-headless
+  selector:
+    matchLabels:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "nssf" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.nssf.podAnnotations }}
+      annotations:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.nssf.label }}: {{ .Values.nodeSelectors.nssf.value }}
+    {{- end }}
+      serviceAccountName: nssf
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "nssf" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: nssf
+        image: {{ .Values.images.tags.nssf }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/nssf-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.nssf | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/nssf-run.sh
+          subPath: nssf-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: nssf
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: nssf
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-pcf.yaml b/omec/5g-control-plane/templates/statefulset-pcf.yaml
new file mode 100644
index 0000000..1ab5345
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-pcf.yaml
@@ -0,0 +1,95 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.pcf.deploy }}
+{{ tuple "pcf" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: pcf
+  labels:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: pcf-headless
+  selector:
+    matchLabels:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "pcf" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.pcf.podAnnotations }}
+      annotations:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.pcf.label }}: {{ .Values.nodeSelectors.pcf.value }}
+    {{- end }}
+      serviceAccountName: pcf
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "pcf" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: pcf
+        image: {{ .Values.images.tags.pcf }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/pcf-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.pcf | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/pcf-run.sh
+          subPath: pcf-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: pcf
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: pcf
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-smf.yaml b/omec/5g-control-plane/templates/statefulset-smf.yaml
new file mode 100644
index 0000000..eee62fa
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-smf.yaml
@@ -0,0 +1,97 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.smf.deploy }}
+{{ tuple "smf" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: smf
+  labels:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: smf-headless
+  selector:
+    matchLabels:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "smf" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.smf.podAnnotations }}
+      annotations:
+        helm.sh/hook: pre-install
+        helm.sh/hook-weight: "5"
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.smf.label }}: {{ .Values.nodeSelectors.smf.value }}
+    {{- end }}
+      serviceAccountName: smf
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "smf" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: smf
+        image: {{ .Values.images.tags.smf }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/smf-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.smf | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/smf-run.sh
+          subPath: smf-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: smf
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: smf
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-udm.yaml b/omec/5g-control-plane/templates/statefulset-udm.yaml
new file mode 100644
index 0000000..ac3cebc
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-udm.yaml
@@ -0,0 +1,99 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.udm.deploy }}
+{{ tuple "udm" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: udm
+  labels:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: udm-headless
+  selector:
+    matchLabels:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "udm" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.udm.podAnnotations }}
+      annotations:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.udm.label }}: {{ .Values.nodeSelectors.udm.value }}
+    {{- end }}
+      serviceAccountName: udm
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+      - name: wait-udr-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup udr; do echo waiting for udr; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "udm" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: udm
+        image: {{ .Values.images.tags.udm }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/udm-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.udm | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/udm-run.sh
+          subPath: udm-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: udm
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: udm
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}
diff --git a/omec/5g-control-plane/templates/statefulset-udr.yaml b/omec/5g-control-plane/templates/statefulset-udr.yaml
new file mode 100644
index 0000000..7fad5f1
--- /dev/null
+++ b/omec/5g-control-plane/templates/statefulset-udr.yaml
@@ -0,0 +1,95 @@
+{{/*
+# Copyright 2020-present Open Networking Foundation
+
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+*/}}
+
+{{- if .Values.config.udr.deploy }}
+{{ tuple "udr" . | include "5g-control-plane.service_account" }}
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: udr
+  labels:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 4 }}
+spec:
+  replicas: 1
+  serviceName: udr-headless
+  selector:
+    matchLabels:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 6 }}
+  template:
+    metadata:
+      labels:
+{{ tuple "udr" . | include "5g-control-plane.metadata_labels" | indent 8 }}
+    {{- with .Values.config.udr.podAnnotations }}
+      annotations:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    spec:
+    {{- if .Values.nodeSelectors.enabled }}
+      nodeSelector:
+        {{ .Values.nodeSelectors.udr.label }}: {{ .Values.nodeSelectors.udr.value }}
+    {{- end }}
+      serviceAccountName: udr
+    {{- if .Values.images.credentials }}
+      imagePullSecrets:
+        - name: {{ .Release.Name }}.registry
+    {{- end }}
+      initContainers:
+      - name: wait-nrf-module
+        image: {{ .Values.images.tags.init | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+        command: ['sh', '-c', 'until nslookup nrf; do echo waiting for nrf; sleep 4; done;']
+    {{- if .Values.config.coreDump.enabled }}
+{{ tuple "udr" . | include "5g-control-plane.coredump_init" | indent 6 }}
+    {{- end }}
+      containers:
+      - name: udr
+        image: {{ .Values.images.tags.udr }}
+        imagePullPolicy: {{ .Values.images.pullPolicy }}
+      {{- if .Values.config.coreDump.enabled }}
+        securityContext:
+          runAsUser: 0
+      {{- end }}
+        stdin: true
+        tty: true
+        command: ["/opt/cp/scripts/udr-run.sh"]
+        env:
+        - name: POD_IP
+          valueFrom:
+            fieldRef:
+              fieldPath: status.podIP
+      {{- if .Values.resources.enabled }}
+        resources:
+{{ toYaml .Values.resources.udr | indent 10 }}
+      {{- end }}
+        volumeMounts:
+        - name: cp-script
+          mountPath: /opt/cp/scripts/udr-run.sh
+          subPath: udr-run.sh
+        - name: cp-config
+          mountPath: /free5gc/config
+      {{- if .Values.config.coreDump.enabled }}
+        - name: coredump
+          mountPath: /tmp/coredump
+      {{- end }}
+      volumes:
+      - name: cp-script
+        configMap:
+          name: udr
+          defaultMode: 493
+      - name: cp-config
+        configMap:
+          name: udr
+          defaultMode: 420
+    {{- if .Values.config.coreDump.enabled }}
+      - name: host-rootfs
+        hostPath:
+          path: /
+      - name: coredump
+        hostPath:
+          path: {{ .Values.config.coreDump.path }}
+    {{- end }}
+{{- end }}