Task Details:
=============
    Task ID   : AETHER-2167 : Implement helm charts for deploying prom-label-proxy
    Task Link : https://jira.opennetworking.org/browse/AETHER-2167

Features/Root Cause Analysis :
==============================
    * config model helm chart for prom label proxy
    * prom-label-proxy helm chart
    * getting initial config not done deliberatlywq

Unit Test:
=============
     * Integration testing with prometheus done
     * Integration testing with Grafana pending

Change-Id: I1b94feee56cb7046dd1affb036c3d02585aedcaf
diff --git a/config-models/plproxy-1.x/Chart.yaml b/config-models/plproxy-1.x/Chart.yaml
new file mode 100755
index 0000000..b0d52ae
--- /dev/null
+++ b/config-models/plproxy-1.x/Chart.yaml
@@ -0,0 +1,17 @@
+# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+apiVersion: v2
+name: config-model-plproxy
+version: 1.0.0
+kubeVersion: ">=1.18.0"
+appVersion: 1.0.0
+description: Prom label proxy config model
+keywords:
+  - plproxy
+  - config
+home: https://onosproject.org
+maintainers:
+  - name: ONOS Support
+    email: support@opennetworking.org
diff --git a/config-models/plproxy-1.x/files/plproxy-1.0.0.tree b/config-models/plproxy-1.x/files/plproxy-1.0.0.tree
new file mode 100755
index 0000000..9b0fbaa
--- /dev/null
+++ b/config-models/plproxy-1.x/files/plproxy-1.0.0.tree
@@ -0,0 +1,7 @@
+module: prom-label-proxy
+  +--rw user-groups
+     +--rw user-group* [name]
+        +--rw name     string
+        +--rw label* [name]
+           +--rw name     string
+           +--rw value    string
diff --git a/config-models/plproxy-1.x/files/yang/prom-label-proxy.yang b/config-models/plproxy-1.x/files/yang/prom-label-proxy.yang
new file mode 100755
index 0000000..294b5de
--- /dev/null
+++ b/config-models/plproxy-1.x/files/yang/prom-label-proxy.yang
@@ -0,0 +1,32 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation

+//

+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0

+

+module prom-label-proxy {

+  namespace "http://opennetworking.org/promlabelproxy/config/";

+  prefix plp;

+  organization "Open Networking Foundation.";

+  contact "Amit Wankhede";

+  description "A Aether groups and prom label configuration";

+

+  revision "2021-09-24" {

+    description "Prom label proxy user configuration";

+    reference "RFC 6087";

+  }

+

+  container user-groups {

+    description "The top level container";

+    list user-group {

+		key "name";

+		description "A list of user groups";

+		leaf name { type  string;description "name of user group";}

+		list label {

+			   key "name";

+			   description "A list of labels";

+			   leaf name { type  string;mandatory true;description "name of label";}

+			   leaf value { type  string;mandatory true;description "value of label";}

+		}

+	}

+ }

+

+}

diff --git a/config-models/plproxy-1.x/templates/_helpers.tpl b/config-models/plproxy-1.x/templates/_helpers.tpl
new file mode 100755
index 0000000..3370042
--- /dev/null
+++ b/config-models/plproxy-1.x/templates/_helpers.tpl
@@ -0,0 +1,53 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "plproxy.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "plproxy.fullname" -}}
+{{- if contains "config-model-plproxy" .Release.Name -}}
+{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s-config-model-plproxy" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "plproxy.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+
+{{/*
+Common labels
+*/}}
+{{- define "plproxy.labels" -}}
+helm.sh/chart: {{ include "plproxy.chart" . }}
+{{ include "plproxy.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end -}}
+
+{{/*
+Selector labels
+*/}}
+{{- define "plproxy.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "plproxy.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end -}}
+}
diff --git a/config-models/plproxy-1.x/templates/model.yaml b/config-models/plproxy-1.x/templates/model.yaml
new file mode 100755
index 0000000..bc13d6f
--- /dev/null
+++ b/config-models/plproxy-1.x/templates/model.yaml
@@ -0,0 +1,25 @@
+# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+apiVersion: config.onosproject.org/v1beta1
+kind: Model
+metadata:
+  name: {{ template "plproxy.fullname" . }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "plproxy.labels" . | nindent 4 }}
+spec:
+  plugin:
+    type: PLProxy
+    version: {{ .Chart.AppVersion | quote }}
+  modules:
+  - name: plproxy-service
+    organization: Open Networking Foundation
+    revision: 2021-09-24
+    file: prom-label-proxy.yang
+  files:
+    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
+    {{ base $path }}: |
+{{ $.Files.Get $path | indent 6 }}
+    {{- end }}
diff --git a/config-models/plproxy-1.x/values.yaml b/config-models/plproxy-1.x/values.yaml
new file mode 100755
index 0000000..2e984ed
--- /dev/null
+++ b/config-models/plproxy-1.x/values.yaml
@@ -0,0 +1,3 @@
+# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0