From: xinhuili Date: Fri, 28 Jun 2019 04:34:03 +0000 (-0700) Subject: This patch is to commit into charts X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=commitdiff_plain;h=d96771914eef59382f9c053178338cd6e2c2a7a7;p=iec%2Fxconnect.git This patch is to commit into charts These charts are used to install seba Signed-off-by: XINHUI LI Change-Id: I1696abf492f016086939bb6b05bd8038d4603179 --- diff --git a/helm-charts/README.md b/helm-charts/README.md new file mode 100644 index 0000000..181bf40 --- /dev/null +++ b/helm-charts/README.md @@ -0,0 +1,19 @@ +# Helm charts for CORD + +This repo contains the helm charts for use in the [CORD](https://opencord.org/) +and subsidiary projects. + +Thes charts are published on: + +Please see for more complete +documentation. + +## Changing charts + +When you make changes to charts, please make sure of the following: + +1. Make sure the chart passes a strict lint with `helm lint --strict + `. The `scripts/helmlint.sh` will check all charts. + +2. When you modify a chart, you must increase the version in `Chart.yaml`. You + may also need to update other charts that depend on your chart. diff --git a/helm-charts/VERSION b/helm-charts/VERSION new file mode 100644 index 0000000..f67d718 --- /dev/null +++ b/helm-charts/VERSION @@ -0,0 +1 @@ +6.2.0-dev diff --git a/helm-charts/abstract-olt/.helmignore b/helm-charts/abstract-olt/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/abstract-olt/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/abstract-olt/Chart.yaml b/helm-charts/abstract-olt/Chart.yaml new file mode 100644 index 0000000..1f46dfd --- /dev/null +++ b/helm-charts/abstract-olt/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: abstract-olt +description: A Helm chart for SEBA's Abstract OLT layer +icon: https://guide.opencord.org/logos/cord.svg + +version: 0.1.0 +appVersion: latest diff --git a/helm-charts/abstract-olt/templates/_helpers.tpl b/helm-charts/abstract-olt/templates/_helpers.tpl new file mode 100644 index 0000000..ad49f0a --- /dev/null +++ b/helm-charts/abstract-olt/templates/_helpers.tpl @@ -0,0 +1,48 @@ +{{- /* + Copyright 2018-present Open Networking Foundation + + 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. + */ -}} + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "abstract-olt.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 "abstract-olt.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "abstract-olt.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/abstract-olt/templates/deployment.yaml b/helm-charts/abstract-olt/templates/deployment.yaml new file mode 100644 index 0000000..aedc737 --- /dev/null +++ b/helm-charts/abstract-olt/templates/deployment.yaml @@ -0,0 +1,59 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "abstract-olt.fullname" . }} + labels: + app: {{ template "abstract-olt.name" . }} + chart: {{ template "abstract-olt.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "abstract-olt.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "abstract-olt.name" . }} + release: {{ .Release.Name }} + {{- with .Values.annotations }} + annotations: +{{ toYaml . | indent 8 }} + {{- end }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["/app/AbstractOLT", "-log_file", "/dev/stdout"] + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/abstract-olt/values.yaml b/helm-charts/abstract-olt/values.yaml new file mode 100644 index 0000000..ce34037 --- /dev/null +++ b/helm-charts/abstract-olt/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'opencord/abstract-olt' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: Always + +global: + registry: '' + +service: + type: NodePort + grpcPort: 31777 + restApiPort: 31778 + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +annotations: {} diff --git a/helm-charts/bbsim/Chart.yaml b/helm-charts/bbsim/Chart.yaml new file mode 100644 index 0000000..23bd7ac --- /dev/null +++ b/helm-charts/bbsim/Chart.yaml @@ -0,0 +1,20 @@ +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: bbsim +description: Broadband Simulator +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.1 +appVersion: 1.0.0 diff --git a/helm-charts/bbsim/templates/NOTES.txt b/helm-charts/bbsim/templates/NOTES.txt new file mode 100644 index 0000000..1359652 --- /dev/null +++ b/helm-charts/bbsim/templates/NOTES.txt @@ -0,0 +1,5 @@ +BBSim deployed with release name: {{ .Release.Name }} + +OLT ID: {{ .Values.olt_id }}, on TCP port: {{ .Values.olt_tcp_port }} +# of PON Ports: {{ .Values.pon_ports }} +ONUs per PON Port: {{ .Values.onus_per_pon_port }} (total: {{ mul .Values.pon_ports .Values.onus_per_pon_port}}) diff --git a/helm-charts/bbsim/templates/_helpers.tpl b/helm-charts/bbsim/templates/_helpers.tpl new file mode 100644 index 0000000..af6ac67 --- /dev/null +++ b/helm-charts/bbsim/templates/_helpers.tpl @@ -0,0 +1,48 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "bbsim.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 "bbsim.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "bbsim.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + diff --git a/helm-charts/bbsim/templates/deployment.yaml b/helm-charts/bbsim/templates/deployment.yaml new file mode 100644 index 0000000..8156ed2 --- /dev/null +++ b/helm-charts/bbsim/templates/deployment.yaml @@ -0,0 +1,84 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "bbsim.fullname" . }} + namespace: {{ .Values.namespace }} + labels: + app: {{ template "bbsim.name" . }} + chart: {{ template "bbsim.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "bbsim.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "bbsim.name" . }} + release: {{ .Release.Name }} + spec: + serviceAccount: {{ .Values.serviceAccountName }} + serviceAccountName: {{ .Values.serviceAccountName }} + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.images.bbsim.repository }}:{{ tpl .Values.images.bbsim.tag . }} + imagePullPolicy: {{ .Values.images.bbsim.pullPolicy }} + securityContext: + privileged: true + command: [ + "/app/bbsim", + "-n", "{{ .Values.onus_per_pon_port }}", + "-m", "{{ .Values.emulation_mode }}", + "-H", ":{{ .Values.olt_tcp_port }}", + "-id", "{{ .Values.olt_id }}", + "-i", "{{ .Values.pon_ports }}", + "-aw", "{{ .Values.wpa_wait }}", + "-dw", "{{ .Values.dhcp_wait }}", + "-k", "{{ .Values.kafka_broker }}", + ] + ports: + - name: "bbsim-olt-id-{{ .Values.olt_id }}" + containerPort: {{ .Values.olt_tcp_port }} + port: {{ .Values.olt_tcp_port }} + protocol: TCP + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/bbsim/templates/service.yaml b/helm-charts/bbsim/templates/service.yaml new file mode 100644 index 0000000..d63c129 --- /dev/null +++ b/helm-charts/bbsim/templates/service.yaml @@ -0,0 +1,34 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "bbsim.fullname" . }} + namespace: {{ .Values.namespace }} + labels: + app: {{ template "bbsim.name" . }} + chart: {{ template "bbsim.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: ClusterIP + ports: + - name: "bbsim-olt-id-{{ .Values.olt_id }}" + port: {{ .Values.olt_tcp_port }} + protocol: TCP + selector: + app: {{ template "bbsim.name" . }} + release: {{ .Release.Name }} diff --git a/helm-charts/bbsim/templates/tests/test-bbsim.yaml b/helm-charts/bbsim/templates/tests/test-bbsim.yaml new file mode 100644 index 0000000..93d30d0 --- /dev/null +++ b/helm-charts/bbsim/templates/tests/test-bbsim.yaml @@ -0,0 +1,41 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: "{{ .Release.Name }}-api-test" + annotations: + "helm.sh/hook": test-success +spec: + restartPolicy: Never + containers: + - name: {{ .Release.Name }}-api-test + image: {{ .Values.images.xos_api_tester.repository }}:{{ .Values.images.xos_api_tester.tag }} + imagePullPolicy: {{ .Values.images.xos_api_tester.pullPolicy }} + volumeMounts: + - name: log-volume + mountPath: /src/cord-api/Tests/Log/ + env: + - name: SERVER_IP + value: 'xos-chameleon' + - name: SERVER_PORT + value: '9101' + command: ["robot", "-d", "Log", "-T", "-v", "number_of_onus:{{ .Values.onus_per_pon_port }}", "WorkflowValidations/BBSIM.robot"] + volumes: + - name: log-volume + hostPath: + path: /tmp/helm_test_bbsim_logs_{{ dateInZone "20060102T030405.00Z" (now) "UTC" }} + type: DirectoryOrCreate diff --git a/helm-charts/bbsim/values.yaml b/helm-charts/bbsim/values.yaml new file mode 100644 index 0000000..26c50c2 --- /dev/null +++ b/helm-charts/bbsim/values.yaml @@ -0,0 +1,70 @@ +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# bbsim values + +# CLI switches passed to bbsim + +# -id option +olt_id: 0 + +# -H option, port number portion +olt_tcp_port: 50060 + +# -i option +pon_ports: 1 + +# -n option +onus_per_pon_port: 16 + +# -m option +emulation_mode: 'both' + +# -a option +wpa_wait: 60 + +# -d option +dhcp_wait: 120 + +# -k option +kafka_broker: 'cord-kafka.default.svc.cluster.local:9092' + +images: + bbsim: + repository: 'voltha/voltha-bbsim' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + xos_api_tester: + repository: 'xosproject/xos-api-tester' + tag: 'master' + pullPolicy: 'Always' + +global: + registry: '' + +namespace: voltha +serviceAccountName: default + +nameOverride: "" +fullnameOverride: "" + +replicaCount: 1 + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} \ No newline at end of file diff --git a/helm-charts/configs/onos-debug.yaml b/helm-charts/configs/onos-debug.yaml new file mode 100644 index 0000000..98c7342 --- /dev/null +++ b/helm-charts/configs/onos-debug.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Enabled debugging for ONOS services +# +# helm install onos -f configs/onos-debug.yaml -n onos + +application_logs: | + log4j.logger.org.opencord.olt = DEBUG + log4j.logger.org.opencord.kafka = DEBUG + log4j.logger.org.opencord.sadis = DEBUG diff --git a/helm-charts/configs/seba-ponsim-latest.yaml b/helm-charts/configs/seba-ponsim-latest.yaml new file mode 100644 index 0000000..bd4ad22 --- /dev/null +++ b/helm-charts/configs/seba-ponsim-latest.yaml @@ -0,0 +1,127 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Values file for deploying SEBA with Ponsim +# Use this file to deploy the 'master' (dev) versions of all services. +# This is mainly useful for testing. + +# voltha +etcd-cluster: + clusterSize: 1 + +# in xos-core chart and other charts with multiple images +images: + xos_core: + tag: 'master' + xos_chameleon: + tag: 'master' + xos_tosca: + tag: 'master' + xos_api_tester: + tag: 'master' + tosca_loader: + tag: 'master' +# ONOS + onos: + repository: 'matteoscandolo/onos' + tag: '1.13.9-rc4' +# VOLTHA + vcore: + tag: 'latest' + vcli: + tag: 'latest' + ofagent: + tag: 'latest' + netconf: + tag: 'latest' + envoy_for_etcd: + tag: 'latest' + alarm_generator: + tag: 'latest' + freeradius: + tag: 'latest' + +# Ponsimv2 + olt: + repository: "voltha/voltha-ponsim" + tag: "latest" + onu: + repository: "voltha/voltha-ponsim" + tag: "latest" + +# in xos-gui sub-chart required by xos-core chart +xos-gui: + images: + xos_gui: + tag: 'master' + xos_ws: + tag: 'master' + +# in seba service chart +fabric: + image: + tag: 'master' +fabric-crossconnect: + image: + tag: 'master' +onos-service: + image: + tag: 'master' +sadis-server: + image: + tag: 'latest' +volt: + image: + tag: 'master' +rcord: + image: + tag: 'master' + +# in base-kubernetes chart +kubernetes: + image: + tag: 'master' + +# in workflow/att-workflow service chart +att-workflow-driver: + image: + tag: 'master' + + # this is mandatory, it's needed to correctly configure the kafka endpoint + kafkaService: cord-kafka + +# in workflow/tt-workflow service chart +tt-workflow-driver: + image: + tag: 'master' + + # this is mandatory, it's needed to correctly configure the kafka endpoint + kafkaService: cord-kafka + +# ONOS applications +aaaAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=aaa&v=1.9.0-SNAPSHOT&e=oar" +aaaAppVersion: "1.9.0.SNAPSHOT" + +sadisAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=sadis-app&v=3.1.0-SNAPSHOT&e=oar" +sadisAppVersion: "3.1.0.SNAPSHOT" + +dhcpl2relayAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=dhcpl2relay&v=1.6.0-SNAPSHOT&e=oar" +dhcpl2relayAppVersion: "1.6.0.SNAPSHOT" + +oltAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=olt-app&v=3.0.1-SNAPSHOT&e=oar" +oltAppVersion: "3.0.1.SNAPSHOT" + +kafkaAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=kafka&v=1.1.0-SNAPSHOT&e=oar" +kafkaAppVersion: "1.1.0.SNAPSHOT" diff --git a/helm-charts/configs/seba-ponsim-voltha-1.6.yaml b/helm-charts/configs/seba-ponsim-voltha-1.6.yaml new file mode 100644 index 0000000..b764dda --- /dev/null +++ b/helm-charts/configs/seba-ponsim-voltha-1.6.yaml @@ -0,0 +1,48 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Values file for deploying SEBA with Ponsim +# Use this file to deploy the service versions speecified in the Helm charts. + +# voltha +etcd-cluster: + clusterSize: 1 + +images: +# VOLTHA + vcore: + tag: 'voltha-1.6' + vcli: + tag: 'voltha-1.6' + ofagent: + tag: 'voltha-1.6' + netconf: + tag: 'voltha-1.6' + envoy_for_etcd: + tag: 'voltha-1.6' + alarm_generator: + tag: 'voltha-1.6' +# Ponsimv2 + olt: + tag: "voltha-1.6" + onu: + tag: "voltha-1.6" + rg: + tag: "voltha-1.6" + +# in workflow/att-workflow service chart +att-workflow-driver: + # this is mandatory, it's needed to correctly configure the kafka endpoint + kafkaService: cord-kafka diff --git a/helm-charts/configs/seba-ponsim.yaml b/helm-charts/configs/seba-ponsim.yaml new file mode 100644 index 0000000..69bd0e0 --- /dev/null +++ b/helm-charts/configs/seba-ponsim.yaml @@ -0,0 +1,41 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Values file for deploying SEBA with Ponsim +# Use this file to deploy the service versions speecified in the Helm charts. + +# voltha +etcd-cluster: + clusterSize: 1 + +# in workflow/att-workflow service chart +att-workflow-driver: + # this is mandatory, it's needed to correctly configure the kafka endpoint + kafkaService: cord-kafka + +# in workflow/tt-workflow service chart +tt-workflow-driver: + image: + repository: andybavier/test-image-synchronizer + tag: tt-workflow-driver + + # this is mandatory, it's needed to correctly configure the kafka endpoint + kafkaService: cord-kafka + +# in mininet chart +vlanMatchDepth: 1 + +# in ponsim-pod chart +bandwidthProfiles: False diff --git a/helm-charts/configs/siab-v1.0.0.yaml b/helm-charts/configs/siab-v1.0.0.yaml new file mode 100644 index 0000000..9a78dbf --- /dev/null +++ b/helm-charts/configs/siab-v1.0.0.yaml @@ -0,0 +1,27 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Values file for deploying SEBA with Ponsim +# Use this file to deploy the service versions speecified in the Helm charts. + +# For building released version of seba +voltha: + etcd-cluster: + clusterSize: 1 + +onosOpenflowSvc: "cord-platform-onos-openflow.default.svc.cluster.local" + +sadis-server: + kafkaBroker: "cord-platform-kafka:9092" diff --git a/helm-charts/dhcp-server/Chart.yaml b/helm-charts/dhcp-server/Chart.yaml new file mode 100644 index 0000000..6a1ea18 --- /dev/null +++ b/helm-charts/dhcp-server/Chart.yaml @@ -0,0 +1,17 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: dhcp-server +version: 1.0.0 +appVersion: 'latest' diff --git a/helm-charts/dhcp-server/templates/_helpers.tpl b/helm-charts/dhcp-server/templates/_helpers.tpl new file mode 100644 index 0000000..bcbd46d --- /dev/null +++ b/helm-charts/dhcp-server/templates/_helpers.tpl @@ -0,0 +1,25 @@ + +{{- /* + Copyright 2017-present Open Networking Foundation + + 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. + */ -}} + +{{- define "dhcp-server.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +version: {{ .Chart.Version }} +release: {{ .Release.Name }} +{{- end }} +{{- define "dhcp-server.full_name" -}} +{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 -}} +{{- end -}} diff --git a/helm-charts/dhcp-server/templates/configmap.yaml b/helm-charts/dhcp-server/templates/configmap.yaml new file mode 100644 index 0000000..8436ab6 --- /dev/null +++ b/helm-charts/dhcp-server/templates/configmap.yaml @@ -0,0 +1,22 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: dhcp-server + labels: + {{- include "dhcp-server.release_labels" . | indent 4 }} +data: + config: | {{ .Values.config | indent 4 }} diff --git a/helm-charts/dhcp-server/templates/deployment.yaml b/helm-charts/dhcp-server/templates/deployment.yaml new file mode 100644 index 0000000..4a63279 --- /dev/null +++ b/helm-charts/dhcp-server/templates/deployment.yaml @@ -0,0 +1,48 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: dhcp-server + labels: + app: dhcp-server +spec: + replicas: 1 + template: + metadata: + labels: + app: dhcp-server + spec: + containers: + - name: dhcp-server + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + #command: ["/bin/bash", "-", "sleep 86400"] + ports: + - containerPort: 67 + port: 67 + protocol: UDP + volumeMounts: + - name: dhcp-server + mountPath: /data/dhcpd.conf + subPath: mymounts/dhcpd.conf + volumes: + - name: dhcp-server + configMap: + name: dhcp-server + items: + - key: config + path: mymounts/dhcpd.conf diff --git a/helm-charts/dhcp-server/templates/dhcp-service.yaml b/helm-charts/dhcp-server/templates/dhcp-service.yaml new file mode 100644 index 0000000..6bc8025 --- /dev/null +++ b/helm-charts/dhcp-server/templates/dhcp-service.yaml @@ -0,0 +1,29 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "dhcp-server" + labels: + {{- include "dhcp-server.release_labels" . | indent 4 }} +spec: + type: ClusterIP + ports: + - port: 67 + name: dhcp + targetPort: 67 + protocol: UDP + selector: + app: "dhcp-server" diff --git a/helm-charts/dhcp-server/values.yaml b/helm-charts/dhcp-server/values.yaml new file mode 100644 index 0000000..7ac1ba7 --- /dev/null +++ b/helm-charts/dhcp-server/values.yaml @@ -0,0 +1,34 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# helm install dhcp-server -n dhcp-server + +image: + repository: 'networkboot/dhcpd' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +config: | + + subnet 10.233.0.0 netmask 255.255.0.0 { + range 10.233.0.1 10.233.0.2; + } + subnet 10.200.0.0 netmask 255.255.0.0 { + range 10.200.0.1 10.200.0.253; + option routers 10.200.0.254; + } diff --git a/helm-charts/etcd-cluster/.helmignore b/helm-charts/etcd-cluster/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/etcd-cluster/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/etcd-cluster/Chart.yaml b/helm-charts/etcd-cluster/Chart.yaml new file mode 100644 index 0000000..77a0f4d --- /dev/null +++ b/helm-charts/etcd-cluster/Chart.yaml @@ -0,0 +1,19 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +appVersion: "0.9.2" +description: Create an etcd-cluster using etcd-operator provided CRD +name: etcd-cluster +version: 0.1.2 diff --git a/helm-charts/etcd-cluster/templates/etcd-cluster-service.yaml b/helm-charts/etcd-cluster/templates/etcd-cluster-service.yaml new file mode 100644 index 0000000..08f294e --- /dev/null +++ b/helm-charts/etcd-cluster/templates/etcd-cluster-service.yaml @@ -0,0 +1,30 @@ +{{- if .Values.etcdNodePort -}} +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.clusterName }}-external +spec: + type: NodePort + ports: + - port: 2379 + targetPort: 2379 + nodePort: {{ .Values.etcdNodePort }} + protocol: TCP + selector: + app: "etcd" +{{- end -}} diff --git a/helm-charts/etcd-cluster/templates/etcd-cluster.yaml b/helm-charts/etcd-cluster/templates/etcd-cluster.yaml new file mode 100644 index 0000000..281227f --- /dev/null +++ b/helm-charts/etcd-cluster/templates/etcd-cluster.yaml @@ -0,0 +1,30 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: "etcd.database.coreos.com/v1beta2" +kind: "EtcdCluster" +metadata: + name: {{ quote .Values.clusterName }} +spec: + size: {{ .Values.clusterSize }} + pod: + resources: + limits: + memory: {{ .Values.memoryLimit }} + etcdEnv: + - name: ETCD_AUTO_COMPACTION_RETENTION + value: {{ quote .Values.autoCompactionRetention }} + busyboxImage: {{ .Values.global.registry }}{{ .Values.images.busybox.repository }}:{{ tpl .Values.images.busybox.tag . }} + version: {{ tpl .Values.images.etcd.tag . }} + repository: {{ .Values.global.registry }}{{ .Values.images.etcd.repository }} diff --git a/helm-charts/etcd-cluster/values.yaml b/helm-charts/etcd-cluster/values.yaml new file mode 100644 index 0000000..9bbab01 --- /dev/null +++ b/helm-charts/etcd-cluster/values.yaml @@ -0,0 +1,37 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# Default values for etcd-cluster. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +clusterName: "etcd-cluster" +clusterSize: 3 +memoryLimit: 1024Mi +autoCompactionRetention: "12" + +# expose the etcd-cluster as a nodePort +# etcdNodePort: 32379 +etcdNodePort: "" + +images: + etcd: + repository: "quay.io/coreos/etcd" + tag: "v3.2.18" + busybox: + repository: "busybox" + tag: "1.28.1-glibc" + +global: + registry: "" diff --git a/helm-charts/examples/add-trap-flow.json b/helm-charts/examples/add-trap-flow.json new file mode 100644 index 0000000..14ebaa9 --- /dev/null +++ b/helm-charts/examples/add-trap-flow.json @@ -0,0 +1,30 @@ + { + "flows": [ + { + "priority": 40000, + "timeout": 0, + "isPermanent": true, + "deviceId": "of:0000aabbccddeeff", + "treatment": { + "instructions": [ + { + "type": "OUTPUT", + "port": "CONTROLLER" + } + ] + }, + "selector": { + "criteria": [ + { + "type": "ETH_TYPE", + "ethType": "0x888e" + }, + { + "type": "IN_PORT", + "port": "128" + } + ] + } + } + ] + } \ No newline at end of file diff --git a/helm-charts/examples/add-trap-flow.sh b/helm-charts/examples/add-trap-flow.sh new file mode 100755 index 0000000..e120404 --- /dev/null +++ b/helm-charts/examples/add-trap-flow.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# add-trap-flow.sh +# Adds the EAPOL trap flow needed by Ponsim. In VOLTHA master, Ponsim has the wrong EAPOL trap flow loaded by the adapter. + +http -a karaf:karaf POST http://127.0.0.1:30120/onos/v1/flows < $( dirname "$0" )/add-trap-flow.json diff --git a/helm-charts/examples/adminuser-values.yaml b/helm-charts/examples/adminuser-values.yaml new file mode 100644 index 0000000..bdad17b --- /dev/null +++ b/helm-charts/examples/adminuser-values.yaml @@ -0,0 +1,49 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Override XOS admin user and password values set in values.yaml +# +# helm install -f examples/adminuser-values.yaml xos-core -n xos-core +# helm install -f examples/adminuser-values.yaml xos-profiles/rcord-lite -n rcord-lite + +xosAdminUser: &adminuser "cordadmin@foobar.com" +xosAdminPassword: &adminpass "AVerySecurePassword" + +# Update the username / password for all the services +addressmanager: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass +fabric: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass +onos-service: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass +volt: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass +vsg-hw: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass +kubernetes: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass +exampleservice: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass +simpleexampleservice: + xosAdminUser: *adminuser + xosAdminPassword: *adminpass \ No newline at end of file diff --git a/helm-charts/examples/api-test-images.yaml b/helm-charts/examples/api-test-images.yaml new file mode 100644 index 0000000..ac26cd9 --- /dev/null +++ b/helm-charts/examples/api-test-images.yaml @@ -0,0 +1,37 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Whitelist for use with imagebuilder, only images needed for api-test + +docker_image_whitelist: +- xosproject/chameleon +- xosproject/xos-base +- xosproject/xos-client +- xosproject/xos-core +- xosproject/xos-libraries +- xosproject/xos-tosca +- xosproject/xos-synchronizer-base +- xosproject/rcord-synchronizer +- xosproject/volt-synchronizer +- xosproject/vtn-synchronizer +- xosproject/onos-synchronizer +- xosproject/addressmanager-synchronizer +- xosproject/vsg-hw-synchronizer +- xosproject/kubernetes-synchronizer +- xosproject/fabric-synchronizer +- xosproject/fabric-crossconnect-synchronizer +- xosproject/xos-api-tester +- postgres + diff --git a/helm-charts/examples/api-test-values.yaml b/helm-charts/examples/api-test-values.yaml new file mode 100644 index 0000000..0fb8ba4 --- /dev/null +++ b/helm-charts/examples/api-test-values.yaml @@ -0,0 +1,27 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Values file for API tests +# +# The test process is to install minikube directly on a machine with docker +# installed (`--vm-driver=none`) then use imagebuilder to build images with +# candidate tags into that local docker registry, and run the tests. + +# shared by xos-core, rcord-lite, etc. +imagePullPolicy: 'IfNotPresent' + +# xos-core +xos-gui: + enabled: false diff --git a/helm-charts/examples/bbsim-16.yaml b/helm-charts/examples/bbsim-16.yaml new file mode 100644 index 0000000..9714ed1 --- /dev/null +++ b/helm-charts/examples/bbsim-16.yaml @@ -0,0 +1,430 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# Example TOSCA to create a BBSim OLT and 16 ONUs with SiaB +# Load into xos-tosca with: +# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary @bbsim-16.yaml http://127.0.0.1:30007/run + +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/voltservice.yaml + - custom_types/oltdevice.yaml + - custom_types/onudevice.yaml + - custom_types/attworkflowdriverservice.yaml + - custom_types/attworkflowdriverwhitelistentry.yaml + - custom_types/rcordsubscriber.yaml + +description: Create a simulated OLT Device in VOLTHA +topology_template: + node_templates: + + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + must-exist: true + + olt_device: + type: tosca.nodes.OLTDevice + properties: + name: BBSIM_OLT + device_type: openolt + host: bbsim.voltha.svc + port: 50060 + switch_datapath_id: of:0000000000000002 + switch_port: "3" + outer_tpid: "0x8100" + uplink: "65536" + nas_id: "NAS_ID" + serial_number: "bbsim.voltha.svc:50060" + requirements: + - volt_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + # Whitelist + service#att: + type: tosca.nodes.AttWorkflowDriverService + properties: + name: att-workflow-driver + must-exist: true + + BBSM00000100: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000100 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000101: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000101 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000102: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000102 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000103: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000103 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000104: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000104 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000105: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000105 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000106: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000106 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000107: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000107 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000108: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000108 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM00000109: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM00000109 + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM0000010a: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM0000010a + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM0000010b: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM0000010b + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM0000010c: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM0000010c + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM0000010d: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM0000010d + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM0000010e: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM0000010e + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + BBSM0000010f: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: BBSM0000010f + pon_port_id: 536870913 + device_id: of:0000626273696d76 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne + + # Pre-provision the subscriber + bbsim_subscriber_0: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000100 + status: pre-provisioned + c_tag: 900 + s_tag: 999 + onu_device: BBSM00000100 + circuit_id: circuit0 + remote_id: remote0 + nas_port_id: PON 2/1/01/1:1.1.0 + + bbsim_subscriber_1: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000101 + status: pre-provisioned + c_tag: 901 + s_tag: 999 + onu_device: BBSM00000101 + circuit_id: circuit1 + remote_id: remote1 + nas_port_id: PON 2/1/01/1:1.1.1 + + bbsim_subscriber_2: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000102 + status: pre-provisioned + c_tag: 902 + s_tag: 999 + onu_device: BBSM00000102 + circuit_id: circuit2 + remote_id: remote2 + nas_port_id: PON 2/1/01/1:1.1.2 + + bbsim_subscriber_3: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000103 + status: pre-provisioned + c_tag: 903 + s_tag: 999 + onu_device: BBSM00000103 + circuit_id: circuit3 + remote_id: remote3 + nas_port_id: PON 2/1/01/1:1.1.3 + + bbsim_subscriber_4: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000104 + status: pre-provisioned + c_tag: 904 + s_tag: 999 + onu_device: BBSM00000104 + circuit_id: circuit4 + remote_id: remote4 + nas_port_id: PON 2/1/01/1:1.1.4 + + bbsim_subscriber_5: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000105 + status: pre-provisioned + c_tag: 905 + s_tag: 999 + onu_device: BBSM00000105 + circuit_id: circuit5 + remote_id: remote5 + nas_port_id: PON 2/1/01/1:1.1.5 + + bbsim_subscriber_6: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000106 + status: pre-provisioned + c_tag: 906 + s_tag: 999 + onu_device: BBSM00000106 + circuit_id: circuit6 + remote_id: remote6 + nas_port_id: PON 2/1/01/1:1.1.6 + + bbsim_subscriber_7: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000107 + status: pre-provisioned + c_tag: 907 + s_tag: 999 + onu_device: BBSM00000107 + circuit_id: circuit7 + remote_id: remote7 + nas_port_id: PON 2/1/01/1:1.1.7 + + bbsim_subscriber_8: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000108 + status: pre-provisioned + c_tag: 908 + s_tag: 999 + onu_device: BBSM00000108 + circuit_id: circuit8 + remote_id: remote8 + nas_port_id: PON 2/1/01/1:1.1.8 + + bbsim_subscriber_9: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM00000109 + status: pre-provisioned + c_tag: 909 + s_tag: 999 + onu_device: BBSM00000109 + circuit_id: circuit9 + remote_id: remote9 + nas_port_id: PON 2/1/01/1:1.1.9 + + bbsim_subscriber_a: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM0000010a + status: pre-provisioned + c_tag: 910 + s_tag: 999 + onu_device: BBSM0000010a + circuit_id: circuit10a + remote_id: remote10a + nas_port_id: PON 2/1/01/1:1.1.10a + + bbsim_subscriber_b: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM0000010b + status: pre-provisioned + c_tag: 911 + s_tag: 999 + onu_device: BBSM0000010b + circuit_id: circuit10b + remote_id: remote10b + nas_port_id: PON 2/1/01/1:1.1.10b + + bbsim_subscriber_c: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM0000010c + status: pre-provisioned + c_tag: 912 + s_tag: 999 + onu_device: BBSM0000010c + circuit_id: circuit10c + remote_id: remote10c + nas_port_id: PON 2/1/01/1:1.1.10c + + bbsim_subscriber_d: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM0000010d + status: pre-provisioned + c_tag: 913 + s_tag: 999 + onu_device: BBSM0000010d + circuit_id: circuit10d + remote_id: remote10d + nas_port_id: PON 2/1/01/1:1.1.10d + + bbsim_subscriber_e: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM0000010e + status: pre-provisioned + c_tag: 914 + s_tag: 999 + onu_device: BBSM0000010e + circuit_id: circuit10e + remote_id: remote10e + nas_port_id: PON 2/1/01/1:1.1.10e + + bbsim_subscriber_f: + type: tosca.nodes.RCORDSubscriber + properties: + name: Sub_BBSM0000010f + status: pre-provisioned + c_tag: 915 + s_tag: 999 + onu_device: BBSM0000010f + circuit_id: circuit10f + remote_id: remote10f + nas_port_id: PON 2/1/01/1:1.1.10f diff --git a/helm-charts/examples/bbsim-dhcp.yaml b/helm-charts/examples/bbsim-dhcp.yaml new file mode 100644 index 0000000..89f14aa --- /dev/null +++ b/helm-charts/examples/bbsim-dhcp.yaml @@ -0,0 +1,58 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# Example TOSCA to configure dhcpl2relay when running BBSim standalone with SiaB +# Load into xos-tosca with: +# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary @bbsim-dhcp.yaml http://127.0.0.1:30007/run + +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/bngportmapping.yaml + - custom_types/onosapp.yaml + - custom_types/serviceinstanceattribute.yaml + +description: Create a simulated OLT Device in VOLTHA +topology_template: + node_templates: + + # map the BNG to a port + # this is not really used by BBSIM as there's no data-plane traffic, + # but it's required by NEM to configure the crossconnect + bngmapping: + type: tosca.nodes.BNGPortMapping + properties: + s_tag: any + switch_port: 1 + + # DHCP L2 Relay config + onos_app#dhcpl2relay: + type: tosca.nodes.ONOSApp + properties: + name: dhcpl2relay + must-exist: true + + dhcpl2relay-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.dhcpl2relay + value: > + { + "dhcpl2relay" : { + "useOltUplinkForServerPktInOut" : true + } + } + requirements: + - service_instance: + node: onos_app#dhcpl2relay + relationship: tosca.relationships.BelongsToOne diff --git a/helm-charts/examples/compute-nodes.yaml b/helm-charts/examples/compute-nodes.yaml new file mode 100644 index 0000000..8bdc80b --- /dev/null +++ b/helm-charts/examples/compute-nodes.yaml @@ -0,0 +1,33 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Information for the cluster's OpenStack compute nodes + +computeNodes: + master: + name: node0.opencord.org + bridgeId: of:00000000abcdef01 + dataPlaneIntf: fabric + dataPlaneIp: 10.6.1.1/24 + node1: + name: node1.opencord.org + bridgeId: of:00000000abcdef02 + dataPlaneIntf: fabric + dataPlaneIp: 10.6.1.2/24 + node2: + name: node2.opencord.org + bridgeId: of:00000000abcdef03 + dataPlaneIntf: fabric + dataPlaneIp: 10.6.1.3/24 \ No newline at end of file diff --git a/helm-charts/examples/fabric-values.yaml b/helm-charts/examples/fabric-values.yaml new file mode 100644 index 0000000..2866f05 --- /dev/null +++ b/helm-charts/examples/fabric-values.yaml @@ -0,0 +1,43 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Override null fabric configuration set in rcord-lite's values.yaml +# +# helm install -f examples/fabric-values.yaml xos-profiles/rcord-lite -n rcord-lite + +fabricNetworkConfigJson: &netcfg | + { + "devices": { + }, + "ports": { + }, + "apps" : { + "org.onosproject.segmentrouting" : { + "segmentrouting" : { + "vRouterMacs" : [ "a4:23:05:06:01:01" ] + } + } + } + } + +toscaRecipes: + fabricService: + topology_template: + node_templates: + serviceattribute#fabric_network_cfg_json: + properties: + name: rest_onos/v1/network/configuration/ + value: *netcfg diff --git a/helm-charts/examples/filter-images.yaml b/helm-charts/examples/filter-images.yaml new file mode 100644 index 0000000..9f28d3e --- /dev/null +++ b/helm-charts/examples/filter-images.yaml @@ -0,0 +1,67 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Whitelist for use with imagebuilder + +docker_image_whitelist: +- nginx +- postgres + +# xos-core images +- xosproject/chameleon +- xosproject/xos-base +- xosproject/xos-client +- xosproject/xos-core +- xosproject/xos-gui +- xosproject/xos-gui-builder +- xosproject/xos-libraries +- xosproject/xos-tosca +- xosproject/xos-ws +- xosproject/xos-synchronizer-base + +# rcord images +- xosproject/rcord-synchronizer +- xosproject/volt-synchronizer +- xosproject/vrouter-synchronizer +- xosproject/onos-synchronizer +- xosproject/addressmanager-synchronizer +- xosproject/vsg-hw-synchronizer +- xosproject/fabric-synchronizer +- xosproject/fabric-crossconnect-synchronizer +- xosproject/att-workflow-driver-synchronizer + +# base-openstack images +- xosproject/openstack-synchronizer +- xosproject/vtn-synchronizer + +# mcord images +- "xosproject/vmme-synchronizer" +- "xosproject/vspgwc-synchronizer" +- "xosproject/vspgwu-synchronizer" +- "xosproject/vhss-synchronizer" +- "xosproject/hssdb-synchronizer" +- "xosproject/internetemulator-synchronizer" +- "xosproject/sdncontroller-synchronizer" +- "xosproject/vepc-synchronizer" +- "xosproject/mcord-synchronizer" +- "xosproject/progran-synchronizer" + +# others +- xosproject/hippie-oss-synchronizer +- xosproject/kubernetes-synchronizer +- xosproject/exampleservice-synchronizer +- xosproject/simpleexampleservice-synchronizer +- xosproject/xos-api-tester +- xosproject/tosca-loader diff --git a/helm-charts/examples/image-tag-candidate.yaml b/helm-charts/examples/image-tag-candidate.yaml new file mode 100644 index 0000000..6c023f0 --- /dev/null +++ b/helm-charts/examples/image-tag-candidate.yaml @@ -0,0 +1,124 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Set all image tags to "candidate" to use locally built images +image: + tag: 'candidate' + +# in xos-core chart and other charts with multiple images +images: + xos_core: + tag: 'candidate' + xos_chameleon: + tag: 'candidate' + xos_tosca: + tag: 'candidate' + xos_api_tester: + tag: 'candidate' + tosca_loader: + tag: 'candidate' + +# in xos-gui sub-chart required by xos-core chart +xos-gui: + images: + xos_gui: + tag: 'candidate' + xos_ws: + tag: 'candidate' + +# in RCORD service chart +addressmanager: + image: + tag: 'candidate' +att-workflow-driver: + image: + tag: 'candidate' +fabric: + image: + tag: 'candidate' +fabric-crossconnect: + image: + tag: 'candidate' +onos-service: + image: + tag: 'candidate' +volt: + image: + tag: 'candidate' +vsg-hw: + image: + tag: 'candidate' +vrouter: + image: + tag: 'candidate' +rcord: + image: + tag: 'candidate' + +# in BASE-OPENSTACK chart +openstack: + image: + tag: 'candidate' + +vtn-service: + image: + tag: 'candidate' + +# in MCORD +vmme: + image: + tag: 'candidate' +vspgwc: + image: + tag: 'candidate' +vspgwu: + image: + tag: 'candidate' +vhss: + image: + tag: 'candidate' +hssdb: + image: + tag: 'candidate' +internetemulator: + image: + tag: 'candidate' +sdncontroller: + image: + tag: 'candidate' +epc-service: + image: + tag: 'candidate' +k8spcservice: + image: + tag: 'candidate' +mcord-subscriber: + image: + tag: 'candidate' +progran: + image: + tag: 'candidate' + +# others +kubernetes: + image: + tag: 'candidate' +exampleservice: + image: + tag: 'candidate' +simpleexampleservice: + image: + tag: 'candidate' + diff --git a/helm-charts/examples/imagePullPolicy-IfNotPresent.yaml b/helm-charts/examples/imagePullPolicy-IfNotPresent.yaml new file mode 100644 index 0000000..8e8de99 --- /dev/null +++ b/helm-charts/examples/imagePullPolicy-IfNotPresent.yaml @@ -0,0 +1,130 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Only pull docker images if not already present + +# in xos-core, rcord-lite, onos and voltha charts +image: + pullPolicy: 'IfNotPresent' + +# in xos-core chart and other charts with multiple images +images: + xos_core: + pullPolicy: 'IfNotPresent' + xos_chameleon: + pullPolicy: 'IfNotPresent' + xos_tosca: + pullPolicy: 'IfNotPresent' + xos_api_tester: + pullPolicy: 'IfNotPresent' + tosca_loader: + pullPolicy: 'IfNotPresent' + +xos-db: + image: + pullPolicy: 'IfNotPresent' + +# in xos-gui sub-chart required by xos-core chart +xos-gui: + images: + xos_gui: + pullPolicy: 'IfNotPresent' + xos_ws: + pullPolicy: 'IfNotPresent' + +# in RCORD service chart +addressmanager: + image: + pullPolicy: 'IfNotPresent' +att-workflow-driver: + image: + pullPolicy: 'IfNotPresent' +fabric: + image: + pullPolicy: 'IfNotPresent' +fabric-crossconnect: + image: + pullPolicy: 'IfNotPresent' +onos-service: + image: + pullPolicy: 'IfNotPresent' +volt: + image: + pullPolicy: 'IfNotPresent' +vsg-hw: + image: + pullPolicy: 'IfNotPresent' +rcord: + image: + pullPolicy: 'IfNotPresent' +vrouter: + image: + pullPolicy: 'IfNotPresent' + +# in BASE-OPENSTACK chart +openstack: + image: + pullPolicy: 'IfNotPresent' + +vtn-service: + image: + pullPolicy: 'IfNotPresent' + +# in MCORD +vmme: + image: + pullPolicy: 'IfNotPresent' +vspgwc: + image: + pullPolicy: 'IfNotPresent' +vspgwu: + image: + pullPolicy: 'IfNotPresent' +vhss: + image: + pullPolicy: 'IfNotPresent' +hssdb: + image: + pullPolicy: 'IfNotPresent' +internetemulator: + image: + pullPolicy: 'IfNotPresent' +sdncontroller: + image: + pullPolicy: 'IfNotPresent' +epc-service: + image: + pullPolicy: 'IfNotPresent' +k8sepcservice: + image: + pullPolicy: 'IfNotPresent' +mcord-subscriber: + image: + pullPolicy: 'IfNotPresent' +progran: + image: + pullPolicy: 'IfNotPresent' + +# others +kubernetes: + image: + pullPolicy: 'IfNotPresent' +exampleservice: + image: + pullPolicy: 'IfNotPresent' +simpleexampleservice: + image: + pullPolicy: 'IfNotPresent' + diff --git a/helm-charts/examples/kafka-production.yaml b/helm-charts/examples/kafka-production.yaml new file mode 100644 index 0000000..399edf2 --- /dev/null +++ b/helm-charts/examples/kafka-production.yaml @@ -0,0 +1,53 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Deploy a production ready Kafka with persistent storage +# +# Tested with v0.8.8 of the chart from the helm incubator +# +# ex: +# helm install -f examples/kafka-production.yaml --version 0.8.8 -n cord-kafka incubator/kafka + +# ref: https://kafka.apache.org/documentation/#configuration + +configurationOverrides: + "offsets.topic.replication.factor": 3 + "log.retention.hours": 4 + "log.message.timestamp.type": "LogAppendTime" + +# NOTE: The log.message.timestamp.type override causes timestamps set by the +# producer be overridden on the broker. This should be removed once all kafka +# libraries have been updated to use the newer v1 message format that add the +# timestamp to the message. +# +# The `afkak` client in VOLTHA uses the outdated format, and reports -1 as the +# timestamp. +# +# More context: +# https://cwiki.apache.org/confluence/display/KAFKA/KIP-32+-+Add+timestamps+to+Kafka+message + +replicas: 3 + +persistence: + enabled: true + storageClass: "local-ssd" + size: "10Gi" + +zookeeper: + replicaCount: 3 + persistence: + enabled: true + storageClass: "local-hdd" + size: "10Gi" diff --git a/helm-charts/examples/kafka-single.yaml b/helm-charts/examples/kafka-single.yaml new file mode 100644 index 0000000..8764a9d --- /dev/null +++ b/helm-charts/examples/kafka-single.yaml @@ -0,0 +1,48 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Deploy a single replica of Kafka during development +# +# Tested with v0.8.8 of the chart from the helm incubator +# +# ex: +# helm install -f examples/kafka-single.yaml --version 0.8.8 -n cord-kafka incubator/kafka + +# ref: https://kafka.apache.org/documentation/#configuration +configurationOverrides: + "offsets.topic.replication.factor": 1 + "log.retention.hours": 4 + "log.message.timestamp.type": "LogAppendTime" + +# NOTE: The log.message.timestamp.type override causes timestamps set by the +# producer be overridden on the broker. This should be removed once all kafka +# libraries have been updated to use the newer v1 message format that add the +# timestamp to the message. +# +# The `afkak` client in VOLTHA uses the outdated format, and reports -1 as the +# timestamp. +# +# More context: +# https://cwiki.apache.org/confluence/display/KAFKA/KIP-32+-+Add+timestamps+to+Kafka+message +# +replicas: 1 + +persistence: + enabled: false + +zookeeper: + replicaCount: 1 + persistence: + enabled: false diff --git a/helm-charts/examples/logging-single.yaml b/helm-charts/examples/logging-single.yaml new file mode 100644 index 0000000..025867e --- /dev/null +++ b/helm-charts/examples/logging-single.yaml @@ -0,0 +1,37 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# For testing logging, don't persist data and runs minimum instances of +# elasticsearch components + +elasticsearch: + + cluster: + env: + MINIMUM_MASTER_NODES: "1" + + client: + replicas: 1 + + master: + replicas: 2 + persistence: + enabled: false + + data: + replicas: 1 + persistence: + enabled: false + diff --git a/helm-charts/examples/mcord-images.yaml b/helm-charts/examples/mcord-images.yaml new file mode 100644 index 0000000..d65398f --- /dev/null +++ b/helm-charts/examples/mcord-images.yaml @@ -0,0 +1,32 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Download smaller images for the M-CORD services (for development) + +genericImageURL: &imageURL "https://github.com/opencord/platform-install/releases/download/vms/trusty-server-cloudimg-amd64-disk1.img.20170201" +vmme: + vnfImageURL: *imageURL +vspgwc: + vnfImageURL: *imageURL +vspgwu: + vnfImageURL: *imageURL +vhss: + vnfImageURL: *imageURL +hssdb: + vnfImageURL: *imageURL +internetemulator: + vnfImageURL: *imageURL +sdncontroller: + vnfImageURL: *imageURL diff --git a/helm-charts/examples/onos-nodeport-values.yaml b/helm-charts/examples/onos-nodeport-values.yaml new file mode 100644 index 0000000..8745474 --- /dev/null +++ b/helm-charts/examples/onos-nodeport-values.yaml @@ -0,0 +1,32 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Expose ONOS services using NodePorts +# +# helm install -f examples/onos-nodeport-values.yaml onos + +services: + openflowServiceType: NodePort + ovsdbServiceType: NodePort + sshServiceType: NodePort + uiServiceType: NodePort + ovsdb: + nodePort: 31640 + openflow: + nodePort: 31653 + ssh: + nodePort: 31101 + ui: + nodePort: 31181 diff --git a/helm-charts/examples/openstack-dev-master-node.yaml b/helm-charts/examples/openstack-dev-master-node.yaml new file mode 100644 index 0000000..ee8c91f --- /dev/null +++ b/helm-charts/examples/openstack-dev-master-node.yaml @@ -0,0 +1,25 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# kubectl create -f examples/openstack-dev-master-node.yaml + +kind: Service +apiVersion: v1 +metadata: + name: master + namespace: default +spec: + type: ExternalName + externalName: 172.17.0.1 \ No newline at end of file diff --git a/helm-charts/examples/openstack-instance-tosca.yaml b/helm-charts/examples/openstack-instance-tosca.yaml new file mode 100644 index 0000000..1e12cfa --- /dev/null +++ b/helm-charts/examples/openstack-instance-tosca.yaml @@ -0,0 +1,92 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# TOSCA recipe for adding a sample R-CORD subscriber +# +# http POST $(minikube service xos-tosca --url)/run \ +# xos-username:admin@opencord.org xos-password:letmein \ +# @./openstack-instance-tosca.yaml + +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/flavor.yaml + - custom_types/image.yaml + - custom_types/node.yaml + - custom_types/instance.yaml + - custom_types/slice.yaml + - custom_types/site.yaml + +description: openstack extensions to deployment + +topology_template: + node_templates: + +# Images and flavors + Ubuntu-14.04: + type: tosca.nodes.Image + properties: + name: "Ubuntu 14.04 64-bit" + disk_format: QCOW2 + container_format: BARE + path: https://github.com/opencord/platform-install/releases/download/vms/trusty-server-cloudimg-amd64-disk1.img.20170201 + + m1.small: + type: tosca.nodes.Flavor + properties: + name: m1.small + must-exist: true + + mysite: + type: tosca.nodes.Site + properties: + name: mysite + must-exist: true + + mysite_test: + description: Test Slice + type: tosca.nodes.Slice + properties: + name: mysite_test + requirements: + - site: + node: mysite + relationship: tosca.relationships.BelongsToOne + + compute1: + type: tosca.nodes.Node + properties: + name: insert-node-hostname-here + must-exist: true + + test_instance: + description: Test Instance + type: tosca.nodes.Instance + properties: + name: test_instance + requirements: + - image: + node: Ubuntu-14.04 + relationship: tosca.relationships.BelongsToOne + - flavor: + node: m1.small + relationship: tosca.relationships.BelongsToOne + - slice: + node: mysite_test + relationship: tosca.relationships.BelongsToOne + - node: + node: compute1 + relationship: tosca.relationships.BelongsToOne diff --git a/helm-charts/examples/registry-cephfs.yaml b/helm-charts/examples/registry-cephfs.yaml new file mode 100644 index 0000000..283ee1a --- /dev/null +++ b/helm-charts/examples/registry-cephfs.yaml @@ -0,0 +1,33 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Values file to implement a docker registry using the cord-cephfs StorageClass + +service: + type: NodePort + nodePort: 30500 + +persistence: + enabled: true + storageClass: "cord-cephfs" + accessMode: ReadWriteMany + +replicaCount: 2 + +resources: + limits: + cpu: 100m + memory: 100Mi + diff --git a/helm-charts/examples/sample-rcord-subscriber-tosca.yaml b/helm-charts/examples/sample-rcord-subscriber-tosca.yaml new file mode 100644 index 0000000..4c589f9 --- /dev/null +++ b/helm-charts/examples/sample-rcord-subscriber-tosca.yaml @@ -0,0 +1,79 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# TOSCA recipe for adding a sample R-CORD subscriber +# +# http POST $(minikube service xos-tosca --url)/run \ +# xos-username:admin@opencord.org xos-password:letmein \ +# @./sample-rcord-subscriber-tosca.yaml + + +tosca_definitions_version: tosca_simple_yaml_1_0 + +description: Creates a CORD test subscriber, created by platform-install + +imports: + - custom_types/cordsubscriberroot.yaml + - custom_types/voltservice.yaml + - custom_types/voltdevice.yaml + - custom_types/voltdeviceport.yaml + - custom_types/serviceinstancelink.yaml + +topology_template: + node_templates: + + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + must-exist: true + + # Setup an OLT Device + volt_device: + type: tosca.nodes.VOLTDevice + properties: + name: test-volt-device + device_id: volt-1 + host: 8.8.8.8 + port: 2194 + requirements: + - volt_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + volt_port: + type: tosca.nodes.VOLTDevicePort + properties: + port_id: volt-port-1 + s_tag: 222 + requirements: + - volt_device: + node: volt_device + relationship: tosca.relationships.BelongsToOne + + # A subscriber + my_house: + type: tosca.nodes.CordSubscriberRoot + properties: + name: My House + service_specific_id: "123" + firewall_enable: false + cdn_enable: false + url_filter_enable: false + url_filter_level: R + c_tag: 111 + olt_device: volt-1 + olt_port: volt-port-1 \ No newline at end of file diff --git a/helm-charts/examples/xos-db-ceph-rbd.yaml b/helm-charts/examples/xos-db-ceph-rbd.yaml new file mode 100644 index 0000000..0a78154 --- /dev/null +++ b/helm-charts/examples/xos-db-ceph-rbd.yaml @@ -0,0 +1,20 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# Use a Ceph RBD volume to store the XOS database + +xos-db: + needDBPersistence: true + storageClassName: cord-ceph-rbd diff --git a/helm-charts/examples/xos-db-local-dir.yaml b/helm-charts/examples/xos-db-local-dir.yaml new file mode 100644 index 0000000..ab2e0da --- /dev/null +++ b/helm-charts/examples/xos-db-local-dir.yaml @@ -0,0 +1,20 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Use a local directory to store the XOS database + +xos-db: + needDBPersistence: true + storageClassName: local-directory diff --git a/helm-charts/examples/xossh-candidate.yaml b/helm-charts/examples/xossh-candidate.yaml new file mode 100644 index 0000000..a3446b1 --- /dev/null +++ b/helm-charts/examples/xossh-candidate.yaml @@ -0,0 +1,19 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Use locally created xos-client container with xos-tools/xossh chart +image: + tag: 'candidate' + pullPolicy: 'IfNotPresent' diff --git a/helm-charts/helm-charts-org b/helm-charts/helm-charts-org new file mode 160000 index 0000000..7f60470 --- /dev/null +++ b/helm-charts/helm-charts-org @@ -0,0 +1 @@ +Subproject commit 7f604708fcde87d087aad0e463288392636eed82 diff --git a/helm-charts/logging/.helmignore b/helm-charts/logging/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/logging/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/logging/Chart.yaml b/helm-charts/logging/Chart.yaml new file mode 100644 index 0000000..2817563 --- /dev/null +++ b/helm-charts/logging/Chart.yaml @@ -0,0 +1,18 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +description: Sets up log aggregation infrastructure in Kubernetes, with elasticstack and kibana +name: logging +version: 1.1.0 diff --git a/helm-charts/logging/README.md b/helm-charts/logging/README.md new file mode 100644 index 0000000..4cdd5e6 --- /dev/null +++ b/helm-charts/logging/README.md @@ -0,0 +1,22 @@ +# Logging + +This chart implements a log aggregation framework built on elasticsearch within +kubernetes. + +It requires persistent storage, and currently has default values for the +`local-provisioner` with storage on each k8s node. + +Once these prereqs are satisfied, it can be run with: + + helm install -n logging logging + +(NOTE: the name must be `logging` currently, or name lookups within the pod are broken) + +## Current log sources + +- Container logs from k8s with [fluentd-elasticsearch](https://github.com/helm/charts/tree/master/stable/fluentd-elasticsearch) + +## Using Kibana + +Visit: http://:30601 + diff --git a/helm-charts/logging/requirements.yaml b/helm-charts/logging/requirements.yaml new file mode 100644 index 0000000..73fb4ab --- /dev/null +++ b/helm-charts/logging/requirements.yaml @@ -0,0 +1,35 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: + +- name: elasticsearch + version: 1.15.3 + repository: https://kubernetes-charts.storage.googleapis.com/ + +- name: kibana + condition: kibana.enabled + version: 1.1.2 + repository: https://kubernetes-charts.storage.googleapis.com/ + +- name: fluentd-elasticsearch + condition: fluentd-elasticsearch.enabled + version: 1.4.1 + repository: https://kubernetes-charts.storage.googleapis.com/ + +- name: logstash + condition: logstash.enabled + version: 1.4.2 + repository: https://kubernetes-charts.storage.googleapis.com/ diff --git a/helm-charts/logging/templates/NOTES.txt b/helm-charts/logging/templates/NOTES.txt new file mode 100644 index 0000000..7802534 --- /dev/null +++ b/helm-charts/logging/templates/NOTES.txt @@ -0,0 +1,16 @@ +** Log aggregation for CORD ** + +This chart runs the following services: + +- Elasticsearch + +and optionally: + +- Kibana +- Logstash +- fluentd-elasticsearch (container logs from k8s) + +To access Kibana, go to: + + http://:{{ .Values.kibana.service.nodePort }} + diff --git a/helm-charts/logging/values.yaml b/helm-charts/logging/values.yaml new file mode 100644 index 0000000..fb86e23 --- /dev/null +++ b/helm-charts/logging/values.yaml @@ -0,0 +1,144 @@ +--- +# Copyright 2018--present Open Networking Foundation +# +# 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. + +# Values file for SEBA log aggregation infra +# NOTE: must start this chart with the name "logging": +# helm install -n logging logging +# ortherwise the elasticsearch hostname won't work properly in the other containers + +# elasticstack config +# ref: https://github.com/helm/charts/tree/master/incubator/elasticsearch +elasticsearch: + client: + serviceType: "NodePort" + master: + persistence: + storageClass: "local-ssd" + size: "5Gi" + data: + persistence: + storageClass: "local-hdd" + size: "10Gi" + +# kibana config +# ref: https://github.com/helm/charts/tree/master/stable/kibana +kibana: + enabled: true +# dashboardImport: +# dashboards: |- +# + service: + type: "NodePort" + nodePort: 30601 + env: + ELASTICSEARCH_URL: "http://logging-elasticsearch-client:9200" + + dashboardImport: + dashboards: + 1_create_index: |- + { + "version": "6.4.2", + "objects": [ + { + "id": "749ea2f0-d15c-11e8-b4aa-8f5499fd5eba", + "type": "index-pattern", + "version": 2, + "attributes": { + "title": "logstash-*", + "timeFieldName": "@timestamp", + "fields": "[{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"bundle.id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"bundle.id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"bundle.name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"bundle.name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"bundle.version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"bundle.version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"category\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"category.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"error.message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"error.message.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"error.type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"error.type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"detail\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.latitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.location\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.longitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"input.type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"input.type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kafka_key\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"kafka_key.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kafka_timestamp\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"kafka_timestamp.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kafka_topic\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"kafka_topic.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"levelname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"levelname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"levelno\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"lineno\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"offset\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"msg.model\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"msg.version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"thread\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"threadName\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]" + } + } + ] + } + +# logstash config +# ref: https://github.com/helm/charts/tree/master/incubator/logstash +logstash: + enabled: true + elasticsearch: + host: "logging-elasticsearch-client" + + # we have kafka, so persistence isn't needed + # ref: https://www.elastic.co/guide/en/logstash/current/persistent-queues.html + persistence: + enabled: false + + # Probe default delays are too short, which puts logstash into a reboot loop + livenessProbe: + initialDelaySeconds: 120 + + readinessProbe: + initialDelaySeconds: 120 + + # 'config' k/v are turned into env vars for logstash container + # ref: https://www.elastic.co/guide/en/logstash/current/docker-config.html#docker-env-config + # config: + # LOG_LEVEL: trace + + # Kafka input plugin + # ref: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html + inputs: + main: |- + input { + kafka { + auto_offset_reset => "earliest" # get all previous items from new topics + bootstrap_servers => "cord-kafka:9092" + client_id => "logstash_ck" + codec => json { charset => "UTF-8" } + consumer_threads => 1 + decorate_events => true + group_id => "logstash_ck" + metadata_max_age_ms => 60000 # recheck for new topics every minute + # other topics that are not indexed: xos.gui_events, voltha.kpis, voltha.heartbeat + topics_pattern => '.*\.events|dhcp.*|onos.*|.*\.log.*' + type => "cord-kafka" + } + } + + filters: + main: |- + filter { + mutate { + add_field => { + "kafka_topic" => "%{[@metadata][kafka][topic]}" + "kafka_key" => "%{[@metadata][kafka][key]}" + "kafka_timestamp" => "%{[@metadata][kafka][timestamp]}" + } + } + + json { + source => "data" + target => "data" + skip_on_invalid_json => true + } + } + + outputs: + main: |- + output { + elasticsearch { + hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"] + } + } + +# fluentd-elasticsearch config +# ref: https://github.com/helm/charts/tree/master/stable/fluentd-elasticsearch +# forwards k8s logs from nodes to elasticsearch +fluentd-elasticsearch: + enabled: false + elasticsearch: + host: "logging-elasticsearch-client" + diff --git a/helm-charts/mavenrepo/Chart.yaml b/helm-charts/mavenrepo/Chart.yaml new file mode 100644 index 0000000..40351d4 --- /dev/null +++ b/helm-charts/mavenrepo/Chart.yaml @@ -0,0 +1,20 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: mavenrepo +icon: https://guide.opencord.org/logos/cord.svg +version: 1.0.0 + +appVersion: 'latest' diff --git a/helm-charts/mavenrepo/templates/_helpers.tpl b/helm-charts/mavenrepo/templates/_helpers.tpl new file mode 100644 index 0000000..8d64325 --- /dev/null +++ b/helm-charts/mavenrepo/templates/_helpers.tpl @@ -0,0 +1,36 @@ + +{{- /* + Copyright 2017-present Open Networking Foundation + + 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. + */ -}} + + {{- define "mavenrepo.name" -}} + {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} + {{- end -}} + +{{- define "mavenrepo.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +version: {{ .Chart.Version }} +release: {{ .Release.Name }} +{{- end }} +{{- define "mavenrepo.fullname" -}} +{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mavenrepo.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/mavenrepo/templates/deployment.yaml b/helm-charts/mavenrepo/templates/deployment.yaml new file mode 100644 index 0000000..a222c06 --- /dev/null +++ b/helm-charts/mavenrepo/templates/deployment.yaml @@ -0,0 +1,36 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: mavenrepo + labels: + app: mavenrepo +spec: + replicas: 1 + template: + metadata: + labels: + app: {{ template "mavenrepo.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: mavenrepo + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 80 + port: 80 + protocol: TCP diff --git a/helm-charts/mavenrepo/templates/repo-service.yaml b/helm-charts/mavenrepo/templates/repo-service.yaml new file mode 100644 index 0000000..f9ba1d8 --- /dev/null +++ b/helm-charts/mavenrepo/templates/repo-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "mavenrepo.fullname" . }}-http + labels: + app: {{ template "mavenrepo.name" . }} + chart: {{ template "mavenrepo.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: NodePort + ports: + - name: http + port: 80 + targetPort: 80 + nodePort: 30160 + selector: + app: mavenrepo + release: {{ .Release.Name }} diff --git a/helm-charts/mavenrepo/values.yaml b/helm-charts/mavenrepo/values.yaml new file mode 100644 index 0000000..f5bdd17 --- /dev/null +++ b/helm-charts/mavenrepo/values.yaml @@ -0,0 +1,27 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# helm install mavenrepo -n mavenrepo + +image: + repository: 'opencord/mavenrepo' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +nameOverride: "" +fullnameOverride: "" diff --git a/helm-charts/mcord-release/Dockerfile.sriovds/Dockerfile b/helm-charts/mcord-release/Dockerfile.sriovds/Dockerfile new file mode 100644 index 0000000..bae1e3f --- /dev/null +++ b/helm-charts/mcord-release/Dockerfile.sriovds/Dockerfile @@ -0,0 +1,43 @@ +# Build multus plugin +FROM golang:1.10 AS multus +RUN git clone -q --depth 1 https://github.com/intel/multus-cni.git /go/src/github.com/intel/multus-cni +WORKDIR /go/src/github.com/intel/multus-cni +RUN ./build + +# Build sriov plugin +FROM golang:1.10 AS sriov-cni +RUN git clone -q -b dev/k8s-deviceid-model https://github.com/Intel-Corp/sriov-cni.git /go/src/github.com/intel-corp/sriov-cni +WORKDIR /go/src/github.com/intel-corp/sriov-cni +RUN ./build + +# Build sriov device plugin +FROM golang:1.10 AS sriov-dp +RUN git clone -q https://github.com/intel/sriov-network-device-plugin.git /go/src/github.com/intel/sriov-network-device-plugin +WORKDIR /go/src/github.com/intel/sriov-network-device-plugin +RUN make + +# Build centralip ipam plugin +FROM golang:1.10 AS centralip-ipam +RUN go get -u github.com/kardianos/govendor +RUN git clone -q https://github.com/John-Lin/ovs-cni.git /go/src/github.com/John-Lin/ovs-cni +WORKDIR /go/src/github.com/John-Lin/ovs-cni +RUN govendor sync && ./build.sh + +# Build vfioveth plugin +FROM busybox as vfioveth +RUN wget -O /bin/vfioveth https://raw.githubusercontent.com/clearlinux/cloud-native-setup/master/clr-k8s-examples/9-multi-network/cni/vfioveth +RUN wget -O /bin/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 +RUN chmod +x /bin/vfioveth /bin/jq + +# Final image +FROM centos/systemd +LABEL author="Saikrishna Edupuganti " +WORKDIR /tmp/cni/bin +COPY --from=multus /go/src/github.com/intel/multus-cni/bin/multus . +COPY --from=sriov-cni /go/src/github.com/intel-corp/sriov-cni/bin/sriov . +COPY --from=centralip-ipam /go/src/github.com/John-Lin/ovs-cni/bin/centralip . +COPY --from=vfioveth /bin/vfioveth . +COPY --from=vfioveth /bin/jq . +WORKDIR /usr/bin +COPY --from=sriov-dp /go/src/github.com/intel/sriov-network-device-plugin/build/sriovdp . + diff --git a/helm-charts/mcord-release/assets/mcord-architecture.png b/helm-charts/mcord-release/assets/mcord-architecture.png new file mode 100644 index 0000000..e36d0e8 Binary files /dev/null and b/helm-charts/mcord-release/assets/mcord-architecture.png differ diff --git a/helm-charts/mcord-release/mcord-services/.helmignore b/helm-charts/mcord-release/mcord-services/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/mcord-release/mcord-services/Chart.yaml b/helm-charts/mcord-release/mcord-services/Chart.yaml new file mode 100644 index 0000000..6a92698 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +apiVersion: v1 +appVersion: "1.0" +description: M-CORD services with OMEC inside +name: mcord-services +version: 0.1.0 diff --git a/helm-charts/mcord-release/mcord-services/templates/NOTES.txt b/helm-charts/mcord-release/mcord-services/templates/NOTES.txt new file mode 100644 index 0000000..b7a49b5 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/NOTES.txt @@ -0,0 +1,32 @@ +{{- /* +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +*/ -}} + +This is the instruction to configure your eNodeB to work with ONF M-CORD. You can find architecture illustration in assets/mcord-architecture.png. + +1. Check the eNodeB is operating in following information: + eNodeB Address: {{ .Values.enb.host }} + eNodeB S1 port: {{ .Values.enb.port }} + +2. Configure eNodeB with the correct MME information, get MME IP by following commands: + export MMEIP=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.status.podIP}" pods mme-0 + export MMEPORT="36412" + + MMEPORT is fixed in templates/mme.yaml. + +3. Make sure UE's SIM card information is configured in hss.yaml. + +4. Attach UE to M-CORD. diff --git a/helm-charts/mcord-release/mcord-services/templates/_helpers.tpl b/helm-charts/mcord-release/mcord-services/templates/_helpers.tpl new file mode 100644 index 0000000..449fce3 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/_helpers.tpl @@ -0,0 +1,49 @@ +{{- /* +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +*/ -}} + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "mcord-services.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 "mcord-services.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mcord-services.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/mcord-release/mcord-services/templates/hss.yaml b/helm-charts/mcord-release/mcord-services/templates/hss.yaml new file mode 100644 index 0000000..bc62dd2 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/hss.yaml @@ -0,0 +1,284 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +# Default values for mcord-vepc-helm. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.hss.name }} +data: + acl.conf: | + ALLOW_OLD_TLS *.cluster.local + hss.conf: | + Identity = "HSS_IDENTITY"; + Realm = "HSS_REALM"; + TLS_Cred = "CONF_DIR/HSS_HOST.cert.pem", "CONF_DIR/HSS_HOST.key.pem"; + TLS_CA = "CONF_DIR/cacert.pem"; + No_SCTP; + Prefer_TCP; + No_IPv6; + SCTP_streams = 3; + NoRelay; + AppServThreads = 4; + Port = 3868; + SecPort = 5868; + LoadExtension = "/usr/local/lib/freeDiameter/acl_wl.fdx" : "CONF_DIR/acl.conf"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_3gpp2_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_draftload_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_etsi283034_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4004_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4006bis_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4072_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4590_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5447_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5580_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5777_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5778_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6734_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6942_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7155_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7683_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7944_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29061_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29128_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29154_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29173_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29212_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29214_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29215_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29217_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29229_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29272_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29273_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29329_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29336_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29337_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29338_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29343_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29344_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29345_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29368_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29468_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts32299_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6as6d.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6t.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6c.fdx"; + hss.json: | + {"common": { + "fdcfg": "CONF_DIR/hss.conf", + "originhost": "HSS_IDENTITY", + "originrealm": "HSS_REALM" + }, + "hss": { + "gtwhost": "*", + "gtwport" : 9080, + "restport" : 9081, + "ossport" : 9082, + "casssrv": "HSSDB_ADDR", + "cassusr": "root", + "casspwd": "root", + "cassdb" : "vhss", + "casscoreconnections" : 2, + "cassmaxconnections" : 8, + "cassioqueuesize" : 32768, + "cassiothreads" : 2, + "randv" : true, + "optkey" : "63bfa50ee6523365ff14c1f45f88737d", + "reloadkey" : true, + "logsize": 20, + "lognumber": 5, + "logname": "LOGS_DIR/hss.log", + "logqsize": 8192, + "statlogsize": 20, + "statlognumber": 5, + "statlogname": "LOGS_DIR/hss_stat.log", + "auditlogsize": 20, + "auditlognumber": 5, + "auditlogname": "LOGS_DIR/hss_audit.log", + "statfreq": 2000, + "numworkers": 4, + "concurrent": 10, + "ossfile": "CONF_DIR/oss.json" + } + } + oss.json: | + { + "option": { + "id": "url", + "type": "string" + }, + "services": [ + { + "id": "logger", + "commands": [ + { + "id": "describe_loggers" + }, + { + "id": "set_logger_level", + "options": [ + { + "id": "name", + "type": "string" + }, + { + "id": "level", + "type": "integer" + } + ] + } + ] + }, + { + "id": "stats", + "commands": [ + { + "id": "describe_stats_frequency" + }, + { + "id": "describe_stats_live" + }, + { + "id": "set_stats_frequency", + "options": [ + { + "id": "frequency", + "type": "integer" + } + ] + } + ] + } + ] + } + launch.sh: | + #!/bin/bash -x + + CONF_DIR="/opt/c3po/hss/conf" + LOGS_DIR="/opt/c3po/hss/logs" + mkdir -p $CONF_DIR $LOGS_DIR + + cp /etc/hss/conf/{acl.conf,hss.json,hss.conf,oss.json} $CONF_DIR + + HSS_HOST=$(hostname) + HSS_DOMAIN=$(dnsdomainname) + + # from hss.json + sed -i "s!HSS_IDENTITY!$HSS_HOST.$HSS_DOMAIN!g" $CONF_DIR/hss.json + sed -i "s!HSS_REALM!$HSS_DOMAIN!g" $CONF_DIR/hss.json + sed -i "s!HSSDB_ADDR!$HSSDB_ADDR!g" $CONF_DIR/hss.json + sed -i "s!CONF_DIR!$CONF_DIR!g" $CONF_DIR/hss.json + sed -i "s!LOGS_DIR!$LOGS_DIR!g" $CONF_DIR/hss.json + + # from hss.conf + sed -i "s!HSS_IDENTITY!$HSS_HOST.$HSS_DOMAIN!g" $CONF_DIR/hss.conf + sed -i "s!HSS_REALM!$HSS_DOMAIN!g" $CONF_DIR/hss.conf + sed -i "s!HSS_HOST!$HSS_HOST!g" $CONF_DIR/hss.conf + sed -i "s!CONF_DIR!$CONF_DIR!g" $CONF_DIR/hss.conf + cat $CONF_DIR/{hss.json,hss.conf} + + # If necessary, calculate the OPc value for each UE (User Equipment). + #./bin/hss -j conf/hss.json --onlyloadkey + cd $CONF_DIR + make_certs.sh $(hostname) $(dnsdomainname) + cd .. + # finally, launch + hss -j $CONF_DIR/hss.json +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.hss.name }} +spec: + selector: + app: {{ .Values.hss.name }} + clusterIP: None + ports: + - name: s6a + port: 3868 + protocol: TCP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Values.hss.name }} + labels: + app: {{ .Values.hss.name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ .Values.hss.name }} + serviceName: {{ .Values.hss.name }} + template: + metadata: + labels: + app: {{ .Values.hss.name }} + spec: + initContainers: + - name: init-hss + image: {{ .Values.hss.initimage }} + imagePullPolicy: Always + command: [ "bash", "-xc"] + # TODO: Move the SIM card configuration into values.yaml + args: + - until nslookup $HSSDB_ADDR; do echo "waiting for hssdb"; sleep 2; done; + until cqlsh --file /opt/c3po/hssdb/oai_db.cql $HSSDB_ADDR; do echo "provisioning hssdb"; sleep 2; done; + until data_provisioning_users.sh 208014567891200 1122334455 apn1 465B5CE8B199B49FAA5F0A2EE238A6BC 10 $HSSDB_ADDR $MME_HOST.$MME_REALM $MME_REALM; + do echo "setting up users"; sleep 2; done; + until data_provisioning_mme.sh 1 19136246000 $MME_HOST.$MME_REALM $MME_REALM 1 $HSSDB_ADDR; do echo "setting up mme"; sleep 2; done; + until data_provisioning_mme.sh 1 19136246000 smsrouter.test3gpp.net test3gpp.net 0 $HSSDB_ADDR; do echo "setting up smsrouter"; sleep 2; done; + env: + - name: HSSDB_ADDR + value: {{ .Values.hssdb.name }} + - name: MME_HOST + value: mme-0 + - name: MME_REALM + value: {{ .Values.mme.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + containers: + - name: hss + image: {{ .Values.hss.image }} + imagePullPolicy: {{ .Values.global.imagepullpolicy }} + stdin: true + tty: true + env: + - name: HSSDB_ADDR + value: {{ .Values.hssdb.name | quote }} + - name: MME_IDENTITY + value: {{ .Values.mme.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + command: ["bash", "-c", "/opt/c3po/hss/launch.sh; sleep 3600"] + resources: + limits: + cpu: {{ .Values.hss.cpu | quote }} + memory: {{ .Values.hss.memory }} + volumeMounts: + - name: hss-script + mountPath: /opt/c3po/hss/launch.sh + subPath: launch.sh + - name: hss-config + mountPath: /etc/hss/conf + volumes: + - name: hss-script + configMap: + name: {{ .Values.hss.name }} + defaultMode: 493 + - name: hss-config + configMap: + name: {{ .Values.hss.name }} + defaultMode: 420 diff --git a/helm-charts/mcord-release/mcord-services/templates/hssdb.yaml b/helm-charts/mcord-release/mcord-services/templates/hssdb.yaml new file mode 100644 index 0000000..7697838 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/hssdb.yaml @@ -0,0 +1,109 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.hssdb.name }} +data: + cassandra-rackdc.properties: | + dc=DC1 + rack=RAC1 + prefer_local=true +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: {{ .Values.hssdb.name }} + name: {{ .Values.hssdb.name }} +spec: + clusterIP: None + ports: + - name: cql + port: 9042 + selector: + app: {{ .Values.hssdb.name }} +--- +apiVersion: "apps/v1" +kind: StatefulSet +metadata: + name: {{ .Values.hssdb.name }} + labels: + app: {{ .Values.hssdb.name }} +spec: + serviceName: {{ .Values.hssdb.name }} + replicas: 1 # 3 + selector: + matchLabels: + app: {{ .Values.hssdb.name }} + template: + metadata: + labels: + app: {{ .Values.hssdb.name }} + spec: + securityContext: + runAsUser: 999 + fsGroup: 999 + containers: + - name: cassandra + image: {{ .Values.hssdb.image }} + imagePullPolicy: {{ .Values.global.imagepullpolicy }} + ports: + - containerPort: 9042 + name: cql + resources: + limits: + cpu: {{ .Values.hssdb.cpu | quote }} + memory: {{ .Values.hssdb.memory }} + env: + - name: MAX_HEAP_SIZE + value: 512M + - name: HEAP_NEWSIZE + value: 100M + - name: CASSANDRA_SEEDS + value: "hssdb-0.{{ .Values.hssdb.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }}" + - name: CASSANDRA_CLUSTER_NAME + value: "HSS Cluster" + - name: CASSANDRA_RPC_ADDRESS + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: CASSANDRA_ENDPOINT_SNITCH + value: "GossipingPropertyFileSnitch" + readinessProbe: + exec: + command: ["/bin/bash", "-c", "nodetool status -r | awk -v h=$(hostname) '$2==h {exit ($1==\"UN\" ? 0 : -1)}'"] + initialDelaySeconds: 15 + timeoutSeconds: 5 + volumeMounts: + - name: hssdb-config + mountPath: /etc/cassandra/cassandra-rackdc.properties + subPath: cassandra-rackdc.properties + #- name: hssdb-data + # mountPath: /var/lib/cassandra + volumes: + - name: hssdb-config + configMap: + name: {{ .Values.hssdb.name }} +# volumeClaimTemplates: +# - metadata: +# name: hssdb-data +# spec: +# accessModes: [ "ReadWriteOnce" ] +# resources: +# requests: +# storage: 1Gi diff --git a/helm-charts/mcord-release/mcord-services/templates/mme.yaml b/helm-charts/mcord-release/mcord-services/templates/mme.yaml new file mode 100644 index 0000000..c6e6adb --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/mme.yaml @@ -0,0 +1,293 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.mme.name }} +data: + launch.sh: | + #!/bin/bash + + cd /opt/c3po/mme/bin + cp /etc/mme/conf/{vbsm_cfg.txt,vbfd.conf} . + + # from vbsm_cfg.txt + SGW_S11_IP=${SGW_S11_IP:-sgw.localdomain} + ENB_S1AP_IP=${ENB_S1AP_IP:-enb1.localdomain} + ENB_S1AP_PORT=${ENB_S1AP_PORT:-36412} + MME_ETH0_IP=${MME_ETH0_IP:-0.0.0.0} + + # from vbfd.conf + HSS_CONNECT_PEER=${HSS_CONNECT_PEER:-hss.localdomain} + HSS_S6A_IP=${HSS_S6A_IP:-hss.localdomain} + HSS_PORT=${HSS_PORT:-3868} + VAR_HSS_REALM=${VAR_HSS_REALM:-openair4G.eur} + + sed -i "s/SGW_S11_IP/$(dig $SGW_S11_IP +short)/g" vbsm_cfg.txt + sed -i "s/ENB_S1AP_IP/$ENB_S1AP_IP/g" vbsm_cfg.txt + sed -i "s/ENB_S1AP_PORT/$ENB_S1AP_PORT/g" vbsm_cfg.txt + sed -i "s/MME_ETH0_IP/$MME_ETH0_IP/g" vbsm_cfg.txt + sed -i "s/VAR_HSS_HOST/$HSS_CONNECT_PEER/g" vbsm_cfg.txt + sed -i "s/VAR_HSS_REALM/$VAR_HSS_REALM/g" vbsm_cfg.txt + + MME_HOST=$(hostname) + MME_DOMAIN=$(dnsdomainname) + sed -i "s/HSS_CONNECT_PEER/$HSS_CONNECT_PEER/g" vbfd.conf + sed -i "s/HSS_S6A_IP/$HSS_S6A_IP/g" vbfd.conf + sed -i "s/HSS_PORT/$HSS_PORT/g" vbfd.conf + sed -i "s/MME_IDENTITY/$MME_HOST.$MME_DOMAIN/g" vbfd.conf + sed -i "s/MME_REALM/$MME_DOMAIN/g" vbfd.conf + sed -i "s/MME_HOST/$MME_HOST/g" vbfd.conf + + # generate the certs + ./make_certs.sh $MME_HOST $MME_DOMAIN + + # finally, launch + ./vb_acc + vbfd.conf: | + # -------- Test configuration --------- + + # Identity = "."; + Identity = "MME_IDENTITY"; + Realm = "MME_REALM"; + # Port = 3868; + # SecPort = 3869; + + ConnectPeer = "HSS_CONNECT_PEER" { ConnectTo = "HSS_S6A_IP"; No_TLS; port = HSS_PORT; }; + + # TLS_Cred = ".cert.pem", ".key.pem"; + TLS_Cred = "MME_HOST.cert.pem", + "MME_HOST.key.pem"; + TLS_CA = "cacert.pem"; + + LoadExtension = "/usr/local/lib/freeDiameter/dict_3gpp2_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_draftload_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_etsi283034_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4004_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4006bis_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4072_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4590_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5447_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5580_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5777_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5778_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6734_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6942_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7155_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7683_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7944_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29061_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29128_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29154_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29173_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29212_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29214_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29215_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29217_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29229_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29272_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29273_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29329_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29336_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29337_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29338_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29343_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29344_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29345_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29368_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29468_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts32299_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6as6d.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6c.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6t.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_SGd.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_T6aT6bT7.fdx"; + vbsm_cfg.txt: | + # Configuration file for MME + + ##### NOTE: Please Do NOT change the order of the parameters ##### + + # EGTP related + VBSM_EG_DFLT_PORT 2123 # EGTP Default port + VBSM_EG_NONDFLT_PORT 2124 # EGTP Non Default port + VBSM_EG_S10_NONDFLT_PORT 2125 # EGTP Non Default + VBSM_EG_S3_NONDFLT_PORT 2126 # EGTP Non Default port for S3 interface towards SGSN + # port for S10 + VBSM_EG_DFLT_HOST_NAME "sutlej.ccin.ccpu.com" # EGTP host name + + # E-NodeB related + VBSM_ENB_ADDR_1 "ENB_S1AP_IP" # IP address of eNodeB + VBSM_ENB_PORT_1 "ENB_S1AP_PORT" # eNodeB port + #VBSM_ENB_ADDR_2 "172.26.20.180" # IP address of eNodeB + #VBSM_ENB_PORT_2 36422 # eNodeB port + + # MME related + VBSM_MME_IPADDR "MME_ETH0_IP" # MME IP address + VBSM_MME_S1AP_IPADDR "MME_ETH0_IP" # MME IP address associated with the S1AP interface + VBSM_MME_EGTP_IPADDR "MME_ETH0_IP" # MME IP address associated with the EGTP interface + VBSM_MME_SCTP_PORT 36412 # MME SCTP port + + VBSM_SGW_IPADDR "SGW_S11_IP" # SGW IP address + VBSM_PGW_IPADDR "192.168.1.105" # PDN-GW IP address + + VBSM_UE_NUM 1000 # Support 1000 UE's + VBSM_SCTP_UDP_SERV_TYPE 0 #service type,default 0 SCTP + + # Debug mask to be set; each represent + #different debug masks to be set (1 and 0 to unset) + #in the form |LVB_DBGMASK_INFO|LVB_DBGMASK_ERROR|LVB_DBGMASK_TRC|LVB_DBGMASK_MEM + + VBSM_MME_DBG_MASK 1111 + VBSM_DBG_MASK 1111 + VBSM_NW_INIATED_DETACH_TIMER 1000 + + VBSM_MCC_DIG1 2 + VBSM_MCC_DIG2 0 + VBSM_MCC_DIG3 8 + + VBSM_MNC_DIG1 0 + VBSM_MNC_DIG2 1 + VBSM_MNC_DIG3 -1 + + # Target PLMN ID format [ MCC + MNC], + is concatination operator + # If MNC has two digits, the last charater shall be 'f' + # Valid Configurations: 11223f, 112345. + VBSM_TARGET_MME_PLMN_ID 31310f + VBSM_TARGET_MME_IP_ADDR "192.25.1.100" + + VBSM_T3412 32 + + VBSM_SGSN_IP_ADDR "192.25.1.195" + + + VBSM_SGSN_PLMN_ID 31311f + + VBSM_FD_CFG "vbfd.conf" + VBSM_HSS_HOST "VAR_HSS_HOST" + VBSM_HSS_REALM "VAR_HSS_REALM" + + # set VBSM_DISABLE_EPC_DNS 0 - enable DNS, 1 - disable DNS + VBSM_DISABLE_EPC_DNS 1 + VBSM_DISABLE_EIA0 1 + VBSM_REL_CAP 1 + VBSM_MME_NAME "vmmestandalone" + VBSM_S1C_SCTP_INSTREAMS 10 + VBSM_S1C_SCTP_OUTSTREAMS 10 + VBSM_MAX_ENB 2 + VBSM_NO_OFGUMMEIS 1 + VBSM_MMECODE 1 + VBSM_MMEGRPID 1 + VBSM_NO_OF_TAI 1 + VBSM_TAI_LIST {{"{{1,2,0,8,0,1,1}}"}} + + VBSM_SMS_ROUTER_HOST "smsrouter.test3gpp.net" + VBSM_SMS_ROUTER_REALM "test3gpp.net" +--- +apiVersion: v1 +kind: Service +metadata: + name: mme +spec: + selector: + app: mme + clusterIP: None + ports: + - name: s11 + port: 2123 + protocol: UDP + - name: s1ap + port: 36412 + protocol: TCP + - name: s6a + port: 3868 + protocol: TCP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Values.mme.name }} + labels: + app: {{ .Values.mme.name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ .Values.mme.name }} + serviceName: {{ .Values.mme.name | quote }} + template: + metadata: + labels: + app: {{ .Values.mme.name }} + spec: + # Insert iptable rules as MME implements a userspace SCTP stack + initContainers: + - name: init-mme + image: {{ .Values.mme.initimage }} + command: [ "sh", "-c"] + securityContext: + capabilities: + add: + - NET_ADMIN + args: + - iptables -A OUTPUT -p sctp --sport 36412 --chunk-types any ABORT -j DROP; + until nslookup hss-0.{{ .Values.hss.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }}; + do echo "waiting for hss"; sleep 2; done; + containers: + - name: mme + image: {{ .Values.mme.image | quote }} + imagePullPolicy: {{ .Values.global.imagepullpolicy }} + env: + - name: SGW_S11_IP + value: cp-0.cp + - name: MME_ETH0_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: ENB_S1AP_IP + value: {{ .Values.enb.host | quote }} + - name: ENB_S1AP_PORT + value: {{ .Values.enb.port | quote }} + - name: HSS_CONNECT_PEER + value: hss-0.{{ .Values.hss.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + - name: VAR_HSS_REALM + value: {{ .Values.hss.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + - name: HSS_S6A_IP + value: hss-0.{{ .Values.hss.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + - name: HSS_PORT + value: "3868" + stdin: true + tty: true + #command: [ "sleep", "3600"] + resources: + limits: + cpu: {{ .Values.mme.cpu | quote }} + memory: {{ .Values.mme.memory }} + volumeMounts: + - name: mme-script + mountPath: /opt/c3po/mme/bin/launch.sh + subPath: launch.sh + - name: mme-config + mountPath: /etc/mme/conf + volumes: + - name: mme-script + configMap: + name: {{ .Values.mme.name }} + defaultMode: 493 + - name: mme-config + configMap: + name: {{ .Values.mme.name }} + defaultMode: 420 diff --git a/helm-charts/mcord-release/mcord-services/templates/networks.yaml b/helm-charts/mcord-release/mcord-services/templates/networks.yaml new file mode 100644 index 0000000..b483fb1 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/networks.yaml @@ -0,0 +1,41 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +{{- range .Values.networks }} +--- +apiVersion: "k8s.cni.cncf.io/v1" +kind: NetworkAttachmentDefinition +metadata: + name: {{ .name }} + annotations: + k8s.v1.cni.cncf.io/resourceName: intel.com/sriov +spec: + config: '{ + "type": {{ .sriovtype | quote }}, + "name": {{ .name | quote }}, + "ipam": { + "type": {{ .ipamtype | quote }}, + {{- if eq .ipamtype "host-local" }} + "subnet": {{ .subnet | quote }}, + "gateway": {{ .gateway | quote }} + {{- else if eq .ipamtype "centralip" }} + "ipType": "cluster", + "network": {{ .subnet | quote }}, + "etcdURL": {{ $.Values.global.etcdurl | quote }} + {{- end }} + } +}' +{{- end }} diff --git a/helm-charts/mcord-release/mcord-services/templates/spgwc.yaml b/helm-charts/mcord-release/mcord-services/templates/spgwc.yaml new file mode 100644 index 0000000..c965922 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/spgwc.yaml @@ -0,0 +1,530 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: spgwc-pod-reader +--- +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: pod-reader +rules: +- apiGroups: [""] + resources: ["pods"] + verbs: ["get"] +--- +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: spgwc-pod-reader-rb +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: pod-reader +subjects: +- kind: ServiceAccount + name: spgwc-pod-reader +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.spgwc.name }} +data: + launch.sh: | + #!/bin/bash -xe + + RUN_DIR=${RUN_DIR:-"/opt/cp"} + mkdir -p $RUN_DIR/config + cd $RUN_DIR/config + cp /etc/cp/config/{adc_rules.cfg,cp_config.cfg,interface.cfg,meter_profile.cfg,pcc_rules.cfg,sdf_rules.cfg} . + sed -i "s/CP_ADDR/$CP_ADDR/g" interface.cfg + sed -i "s/DP_ADDR/$DP_ADDR/g" interface.cfg + . cp_config.cfg + ngic_controlplane $EAL_ARGS -- $APP_ARGS + cp_config.cfg: | + if [ ! -d "/dev/hugepages" ]; then + MEMORY="--no-huge -m $((MEM_LIMIT-1024))" + fi + SHARED_DIR="/opt/cp/config/shared" + if [ -d ${SHARED_DIR} ]; then + while [ ! -f ${SHARED_DIR}/SGW_S1U_IP ]; do echo "Waiting for SGW_S1U_IP"; sleep 2; done + SGW_S1U_IP=$(cat ${SHARED_DIR}/SGW_S1U_IP) + fi + + MGMT_INFO="-s ${CP_ADDR} -m ${MME_S11_IP} -w ${SGW_S1U_IP}" + APN_INFO="-i ${IP_POOL_IP} -p ${IP_POOL_MASK} -a ${APN}" + SPGW_CFG="-d 03 -l 2 -r 7.7.7.7 -g 6.6.6.6 -v 4.4.4.4 -u 5.5.5.5" + APP_ARGS="${MGMT_INFO} ${APN_INFO} ${SPGW_CFG} ${TEID_INFO}" + + CORES="-c $(taskset -p $$ | awk '{print $NF}')" + DEVICES="--no-pci" + EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}" + interface.cfg: | + [0] + dp_comm_ip = DP_ADDR + dp_comm_port = 20 + cp_comm_ip = CP_ADDR + cp_comm_port = 21 + adc_rules.cfg: | + [GLOBAL] + NUM_ADC_RULES = 5 + + ;FORMAT :: + ;ADC_TYPE : [ DOMAIN = 0 | IP = 1 | IP PREFIX =2 ] + ; + ;if ADC_TYPE = 0 + ; DOMAIN + ;elseif ADC_TYPE = 1 + ; IP + ;elseif ADC_TYPE = 2 + ; IP + ; PREFIX + ;else + ; NONE + ; + ;NOTE : + ;Rules defined first have a higher priority, unless DROP is specified + ;(i.e. multiple rules for the same IP). + ;When specifying DROP with an IP address, use a prefix of 32 to prevent DNS + ;results from overwriting rule. + + + [ADC_RULE_1] + ADC_TYPE = 1 + IP = 13.1.1.111 + + [ADC_RULE_2] + ADC_TYPE = 2 + IP = 13.1.1.0 + PREFIX = 24 + + [ADC_RULE_3] + ADC_TYPE = 1 + IP = 13.1.1.112 + PREFIX = 24 + + [ADC_RULE_4] + ADC_TYPE = 0 + DOMAIN = www.example.gov + + [ADC_RULE_5] + ADC_TYPE = 0 + DOMAIN = www.drop_example.com + meter_profile.cfg: | + [GLOBAL] + NUM_OF_IDX = 7 + + [ENTRY_1] + ;Committed Information Rate (CIR). Measured in bytes per second. + ;MBR is mapped into CIR, convert MBR from bits to Bytes and set CIR. + CIR = 2342400 + ;Committed Burst Size unit = Bytes + CBS = 5856 + ;Excess Burst Size unit = Bytes + EBS = 11712 + ;Meter profile index. Refer this index in static_pcc.cfg to set AMBR/MBR + MTR_PROFILE_IDX = 3 + + [ENTRY_2] + ;1200 = 1756800 + ;1400 = 2049600 + ;1600 = 2342400 + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 4 + + [ENTRY_3] + ; QCI5,QCI7 15.571kbps = 1947 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 5 + + [ENTRY_4] + ; QCI1, 44kbps = 5500 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 6 + + [ENTRY_5] + ; QCI9, 31.143kbps = 3893 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 7 + + [ENTRY_6] + ; 128B, 7pps + CIR = 2342400 + CBS = 512 + EBS = 1024 + MTR_PROFILE_IDX = 8 + + [ENTRY_7] + ; 128B, 2pps + CIR = 2342400 + CBS = 512 + EBS = 1024 + MTR_PROFILE_IDX = 9 + + pcc_rules.cfg: | + [GLOBAL] + NUM_PCC_FILTERS = 9 + ;To config AMBR/MBR values refer meter_profile.cfg. specify only the + ;meter profile index to be set here. + UL_AMBR_MTR_PROFILE_IDX = 3 + DL_AMBR_MTR_PROFILE_IDX = 4 + + ;default filter - must be first for now (until DP doesn't install any filters) + ;associated with default adc rule + [PCC_FILTER_1] + RULE_NAME = DefaultRule + RATING_GROUP = 9 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 1 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 254 + DROP_PKT_COUNT = 0 + ;Specify the meter profile index from meter_profile.cfg + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of ADC filter indices + SDF_FILTER_IDX = 99998 + + [PCC_FILTER_2] + RULE_NAME = sdf_rule_1 + RATING_GROUP = 5 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 2 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 1 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 5 + DL_MBR_MTR_PROFILE_IDX = 5 + ;List of SDF filter indices + SDF_FILTER_IDX = 1 + + [PCC_FILTER_3] + RULE_NAME = sdf_rule_2 + RATING_GROUP = 1 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 3 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 18 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 6 + DL_MBR_MTR_PROFILE_IDX = 6 + ;List of SDF filter indices + SDF_FILTER_IDX = 2 + + [PCC_FILTER_4] + RULE_NAME = adc_rule_1 + RATING_GROUP = Zero-Rate + SERVICE_ID = Internet + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 8 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + REDIRECT_INFO = 0 + SPONSOR_ID = Example + PRECEDENCE = 15 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 1 + + [PCC_FILTER_5] + RULE_NAME = adc_rule_2 + RATING_GROUP = 0 + SERVICE_ID = CIPA + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 9 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 4 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 0 + DL_MBR_MTR_PROFILE_IDX = 0 + ;List of SDF filter indices + ADC_FILTER_IDX = 2 + + [PCC_FILTER_6] + RULE_NAME = sdf_rule_3 + RATING_GROUP = 7 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 4 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 17 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 5 + DL_MBR_MTR_PROFILE_IDX = 5 + ;List of SDF filter indices + SDF_FILTER_IDX = 3 + + [PCC_FILTER_7] + RULE_NAME = adc_rule_3 + RATING_GROUP = Zero-Rate + SERVICE_ID = Internet + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 5 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 210 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 4 + + [PCC_FILTER_8] + RULE_NAME = adc_rule_4 + RATING_GROUP = Zero-Rate + SERVICE_ID = Management + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 6 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 200 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 12 + + [PCC_FILTER_9] + RULE_NAME = adc_rule_5 + RATING_GROUP = Zero-Rate + SERVICE_ID = Provisioning + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 7 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 220 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 3 + sdf_rules.cfg: | + [GLOBAL] + NUM_SDF_FILTERS = 4 + + [SDF_FILTER_1] + DIRECTION = downlink_only + IPV4_REMOTE = 13.2.1.113 + IPV4_REMOTE_MASK = 255.255.255.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 0 + LOCAL_HIGH_LIMIT_PORT = 65535 + REMOTE_LOW_LIMIT_PORT = 0 + REMOTE_HIGH_LIMIT_PORT = 65535 + + [SDF_FILTER_2] + DIRECTION = uplink_only + IPV4_LOCAL = 16.255.255.0 + IPV4_LOCAL_MASK = 255.255.255.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 0 + LOCAL_HIGH_LIMIT_PORT = 65535 + REMOTE_LOW_LIMIT_PORT = 0 + REMOTE_HIGH_LIMIT_PORT = 65535 + + [SDF_FILTER_3] + DIRECTION = downlink_only + IPV4_REMOTE = 130.10.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + REMOTE_LOW_LIMIT_PORT = 5060 + REMOTE_HIGH_LIMIT_PORT = 5060 + + [SDF_FILTER_4] + DIRECTION = uplink_only + IPV4_REMOTE = 103.1.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 17000 + LOCAL_HIGH_LIMIT_PORT = 17010 +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.spgwc.name }} +spec: + selector: + app: {{ .Values.spgwc.name }} + clusterIP: None + ports: + - name: s11 + port: 2123 + protocol: UDP + - name: cpdp + port: 21 + protocol: UDP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Values.spgwc.name }} + labels: + app: {{ .Values.spgwc.name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ .Values.spgwc.name }} + serviceName: {{ .Values.spgwc.name | quote }} + template: + metadata: + labels: + app: {{ .Values.spgwc.name }} + spec: + serviceAccount: spgwc-pod-reader + initContainers: + - name: init-spgwc + image: {{ .Values.spgwc.initimage }} + command: ["/bin/sh", "-co", "pipefail"] + args: + - until $(kubectl get pod -ojson spgwu-0 2>/dev/null | jq -r '.metadata.annotations["k8s.v1.cni.cncf.io/networks-status"]' | jq -r '.[] | select(.name=="s1u-net") | .ips[0]' > /opt/cp/config/shared/SGW_S1U_IP); + do echo "waiting for SPGWU"; sleep 2; done + volumeMounts: + - name: shared-data + mountPath: /opt/cp/config/shared + containers: + - name: spgwc + image: {{ .Values.spgwc.image }} + imagePullPolicy: {{ .Values.global.imagepullpolicy }} + stdin: true + tty: true + command: ["/opt/cp/scripts/launch.sh"] + env: + - name: MEM_LIMIT + valueFrom: + resourceFieldRef: + containerName: spgwc + resource: limits.memory + divisor: 1Mi + #- name: SGW_S1U_IP + # value: "11.1.1.1" + - name: CP_ADDR + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: DP_ADDR + value: spgwu-0.{{ .Values.spgwu.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + - name: MME_S11_IP + value: mme-0.{{ .Values.mme.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + - name: APN + value: apn1 + - name: IP_POOL_IP + value: "16.0.0.0" + - name: IP_POOL_MASK + value: "255.0.0.0" + volumeMounts: + - name: cp-script + mountPath: /opt/cp/scripts/launch.sh + subPath: launch.sh + - name: cp-config + mountPath: /etc/cp/config + - name: shared-data + mountPath: /opt/cp/config/shared + #- name: hugepage + # mountPath: /dev/hugepages + resources: + limits: + #hugepages-2Mi: 4Gi + cpu: {{ .Values.spgwc.cpu | quote }} + memory: {{ .Values.spgwc.memory }} + volumes: + - name: cp-script + configMap: + name: {{ .Values.spgwc.name }} + defaultMode: 493 + - name: cp-config + configMap: + name: {{ .Values.spgwc.name }} + defaultMode: 420 + - name: shared-data + emptyDir: {} + #- name: hugepage + # emptyDir: + # medium: HugePages diff --git a/helm-charts/mcord-release/mcord-services/templates/spgwu.yaml b/helm-charts/mcord-release/mcord-services/templates/spgwu.yaml new file mode 100644 index 0000000..1c0c038 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/templates/spgwu.yaml @@ -0,0 +1,169 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.spgwu.name }} +data: + launch.sh: | + #!/bin/bash -xe + + RUN_DIR=${RUN_DIR:-"/opt/dp"} + mkdir -p $RUN_DIR/config + cd $RUN_DIR/config + cp /etc/dp/config/{cdr.cfg,dp_config.cfg,interface.cfg} . + sed -i "s/CP_ADDR/$CP_ADDR/g" interface.cfg + sed -i "s/DP_ADDR/$DP_ADDR/g" interface.cfg + . dp_config.cfg + ngic_dataplane $EAL_ARGS -- $APP_ARGS + dp_config.cfg: | + if [ ! -d "/dev/hugepages" ]; then + MEMORY="--no-huge -m $((MEM_LIMIT-1024))" + fi + + CORES="-c $(taskset -p $$ | awk '{print $NF}')" + EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}" + + SPGW_CFG="--spgw_cfg 03" + S1U_IP=$(ip -4 addr show dev ${S1U_DEVNAME} | grep -oP '(?<=inet\s)\d+(\.\d+){3}') + SGI_IP=$(ip -4 addr show dev ${SGI_DEVNAME} | grep -oP '(?<=inet\s)\d+(\.\d+){3}') + S1U_MAC=$(ip addr show dev ${S1U_DEVNAME} | awk '$1=="link/ether"{print $2}') + SGI_MAC=$(ip addr show dev ${SGI_DEVNAME} | awk '$1=="link/ether"{print $2}') + S1U="--s1u_ip ${S1U_IP} --s1u_mac ${S1U_MAC} --ul_iface ${S1U_DEVNAME}" + SGI="--sgi_ip ${SGI_IP} --sgi_mac ${SGI_MAC} --dl_iface ${SGI_DEVNAME} --sgi_gw_ip ${RTR_SGI_IP} --sgi_mask ${SGI_MASK}" + MISC="--log 1" + APP_ARGS="${S1U} ${SGI} ${MISC} ${SPGW_CFG}" + cdr.cfg: | + CDR_PATH=./cdr + MASTER_CDR=./cdr/master.csv + interface.cfg: | + [0] + dp_comm_ip = DP_ADDR + dp_comm_port = 20 + cp_comm_ip = CP_ADDR + cp_comm_port = 21 +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.spgwu.name }} +spec: + selector: + app: {{ .Values.spgwu.name }} + clusterIP: None + ports: + - name: cpdp + port: 20 + protocol: UDP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Values.spgwu.name }} + labels: + app: {{ .Values.spgwu.name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ .Values.spgwu.name }} + serviceName: {{ .Values.spgwu.name | quote }} + template: + metadata: + labels: + app: {{ .Values.spgwu.name }} + annotations: + k8s.v1.cni.cncf.io/networks: '[ + { "name": "s1u-net", "interface": "s1u-net" }, + { "name": "sgi-net", "interface": "sgi-net" } + ]' + spec: + # Required if working with Linux bound devices so that kernel does not + # reply to GTP-U packets + #initContainers: + #- name: init + # image: "ngick8stesting/c3po-init" + # command: [ "sh", "-xec"] + # securityContext: + # capabilities: + # add: + # - NET_ADMIN + # args: + # - iptables -I OUTPUT -p icmp --icmp-type destination-unreachable -j DROP; + containers: + - name: {{ .Values.spgwu.name }} + image: {{ .Values.spgwu.image }} + imagePullPolicy: {{ .Values.global.imagepullpolicy }} + stdin: true + tty: true + env: + - name: MEM_LIMIT + valueFrom: + resourceFieldRef: + containerName: {{ .Values.spgwu.name }} + resource: limits.memory + divisor: 1Mi + - name: S1U_DEVNAME + value: s1u-net + - name: SGI_DEVNAME + value: sgi-net + - name: DEVICES + value: "" # "--no-pci --vdev eth_af_packet0,iface=s1u-net --vdev eth_af_packet1,iface=sgi-net" + - name: CP_ADDR + value: spgwc-0.{{ .Values.spgwc.name }}.{{ .Values.global.namespace }}.{{ .Values.global.fqdn }} + - name: DP_ADDR + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: RTR_SGI_IP + value: "13.1.1.254" + - name: SGI_MASK + value: "255.255.255.0" + command: ["bash", "-xc"] + args: + - ip a; + /opt/dp/scripts/launch.sh; + volumeMounts: + - name: dp-script + mountPath: /opt/dp/scripts/launch.sh + subPath: launch.sh + - name: dp-config + mountPath: /etc/dp/config + #- name: hugepage + # mountPath: /dev/hugepages + resources: + limits: + #hugepages-1Gi: 8Gi + cpu: {{ .Values.spgwu.cpu | quote }} + memory: {{ .Values.spgwu.memory }} + intel.com/sriov: 2 + securityContext: + capabilities: + add: + - IPC_LOCK + volumes: + - name: dp-script + configMap: + name: {{ .Values.spgwu.name }} + defaultMode: 493 + - name: dp-config + configMap: + name: {{ .Values.spgwu.name }} + defaultMode: 420 + #- name: hugepage + # emptyDir: + # medium: HugePages diff --git a/helm-charts/mcord-release/mcord-services/values.yaml b/helm-charts/mcord-release/mcord-services/values.yaml new file mode 100644 index 0000000..65fab56 --- /dev/null +++ b/helm-charts/mcord-release/mcord-services/values.yaml @@ -0,0 +1,82 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +# Default values for M-CORD Services +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + + +# Global Block defines shared variables for all Kubernetes objects +# etcdurl: the etcd connection peer for centralIP network plugin +global: + namespace: default + fqdn: svc.cluster.local + imagepullpolicy: IfNotPresent + etcdurl: http://node1:32379 + +hssdb: + name: hssdb + image: krsna1729/c3po-hssdb + cpu: 3 + memory: 4Gi + +hss: + name: hss + initimage: krsna1729/c3po-hssdb + image: krsna1729/c3po-hss + cpu: 3 + memory: 1Gi + +mme: + name: mme + initimage: ngick8stesting/c3po-mmeinit + image: ngick8stesting/c3po-mme:5e2eaf6 + cpu: 3 + memory: 1Gi + +spgwc: + name: spgwc + initimage: ngick8stesting/kubectl + image: krsna1729/ngic-cp + cpu: 3 + memory: 5Gi + +spgwu: + name: spgwu + image: krsna1729/ngic-dp + cpu: 4 + memory: 8Gi + +enb: + host: 10.1.11.3 + port: 36412 + +# Network block defines the network used by SR-IOV pods +# ipamtype: defined the prefered IP management plugin (only support host-local or centralip) +# subnet: defined the customized network subnet range +# gateway: defined the default gateway for pod which attaches to current network +# this option will be ignored when using centralip as ipam plugin +networks: + - name: s1u-net + sriovtype: vfioveth + ipamtype: centralip + subnet: 119.0.0.0/24 + gateway: 119.0.0.254 + - name: sgi-net + sriovtype: vfioveth + ipamtype: centralip + subnet: 13.1.1.0/24 + gateway: 13.1.1.254 diff --git a/helm-charts/mcord-release/mcord-setup/.helmignore b/helm-charts/mcord-release/mcord-setup/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/mcord-release/mcord-setup/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/mcord-release/mcord-setup/Chart.yaml b/helm-charts/mcord-release/mcord-setup/Chart.yaml new file mode 100644 index 0000000..ddbb3f3 --- /dev/null +++ b/helm-charts/mcord-release/mcord-setup/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +apiVersion: v1 +appVersion: "1.0" +description: The prerequisite setup of M-CORD +name: mcord-setup +version: 0.1.0 diff --git a/helm-charts/mcord-release/mcord-setup/templates/NOTES.txt b/helm-charts/mcord-release/mcord-setup/templates/NOTES.txt new file mode 100644 index 0000000..bc70b1d --- /dev/null +++ b/helm-charts/mcord-release/mcord-setup/templates/NOTES.txt @@ -0,0 +1,33 @@ +{{- /* +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +*/ -}} + +Congratulations! You have installed SR-IOV network device plugin into your Kubernetes cluster. + +Your configurations for SR-IOV network device plugin as following: + + 10-Gigabit NIC PCI address: {{ .Values.sriov.devicepci }} + SR-IOV device type: {{ .Values.sriov.devicetype }} + +You can run following command to check SR-IOV is working in Kubernetes cluster: + + $ kubectl -n kube-system -l name=sriov-device-plugin -o wide get pods + $ kubectl get nodes -o json | jq -r '.items[] | "\(.metadata.name): \(.status.allocatable)"' + + node1: {"cpu":"39800m","ephemeral-storage":"452697199891","hugepages-1Gi":"32Gi","intel.com/sriov":"63","memory":"31776336Ki","pods":"110"} + node2: {"cpu":"39800m","ephemeral-storage":"452697199891","hugepages-1Gi":"32Gi","intel.com/sriov":"63","memory":"31776336Ki","pods":"110"} + +The result should show "intel.com/sriov" resource is registered to cluster, and have some virtual function available here. diff --git a/helm-charts/mcord-release/mcord-setup/templates/_helpers.tpl b/helm-charts/mcord-release/mcord-setup/templates/_helpers.tpl new file mode 100644 index 0000000..aabdc98 --- /dev/null +++ b/helm-charts/mcord-release/mcord-setup/templates/_helpers.tpl @@ -0,0 +1,49 @@ +{{- /* +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +*/ -}} + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "mcord-setup.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 "mcord-setup.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mcord-setup.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/mcord-release/mcord-setup/templates/multus-sriov-ds.yaml b/helm-charts/mcord-release/mcord-setup/templates/multus-sriov-ds.yaml new file mode 100644 index 0000000..135e769 --- /dev/null +++ b/helm-charts/mcord-release/mcord-setup/templates/multus-sriov-ds.yaml @@ -0,0 +1,234 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + # name must match the spec fields below, and be in the form: . + name: network-attachment-definitions.k8s.cni.cncf.io + annotations: + "helm.sh/hook": "crd-install" + "helm.sh/hook-delete-policy": "before-hook-creation" +spec: + # group name to use for REST API: /apis// + group: k8s.cni.cncf.io + # version name to use for REST API: /apis// + version: v1 + # either Namespaced or Cluster + scope: Namespaced + names: + # plural name to be used in the URL: /apis/// + plural: network-attachment-definitions + # singular name to be used as an alias on the CLI and for display + singular: network-attachment-definition + # kind is normally the CamelCased singular type. Your resource manifests use this. + kind: NetworkAttachmentDefinition + # shortNames allow shorter string to match your resource on the CLI + shortNames: + - net-attach-def +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: multus-sa + namespace: kube-system + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-delete-policy": "before-hook-creation" +--- +apiVersion: v1 +kind: Secret +metadata: + name: multus-sa-secret + namespace: kube-system + annotations: + kubernetes.io/service-account.name: multus-sa +type: kubernetes.io/service-account-token +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: multus-pod-networks-lister +rules: +- apiGroups: [""] + resources: ["pods"] + verbs: ["get"] +- apiGroups: [""] + resources: ["pods/status"] + verbs: ["update"] +- apiGroups: ["k8s.cni.cncf.io"] + resources: ["*"] + verbs: ["get"] +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: multus-scripts + namespace: kube-system +data: + install-certs.sh: | + # Copied from Calico + # https://github.com/projectcalico/cni-plugin/blob/master/k8s-install/scripts/install-cni.sh + touch /host/etc/cni/net.d/multus-kubeconfig + chmod 600 /host/etc/cni/net.d/multus-kubeconfig + SERVICE_ACCOUNT_PATH=/var/run/secrets/multus/serviceaccount + KUBE_CA_FILE=$SERVICE_ACCOUNT_PATH/ca.crt + TLS_CFG="certificate-authority-data: $(cat $KUBE_CA_FILE | base64 | tr -d '\n')" + SERVICEACCOUNT_TOKEN=$(cat $SERVICE_ACCOUNT_PATH/token) + cat > /host/etc/cni/net.d/multus-kubeconfig < /host/etc/cni/net.d/00-multus.conf <. + name: network-attachment-definitions.k8s.cni.cncf.io +spec: + # group name to use for REST API: /apis// + group: k8s.cni.cncf.io + # version name to use for REST API: /apis// + version: v1 + # either Namespaced or Cluster + scope: Namespaced + names: + # plural name to be used in the URL: /apis/// + plural: network-attachment-definitions + # singular name to be used as an alias on the CLI and for display + singular: network-attachment-definition + # kind is normally the CamelCased singular type. Your resource manifests use this. + kind: NetworkAttachmentDefinition + # shortNames allow shorter string to match your resource on the CLI + shortNames: + - net-attach-def diff --git a/helm-charts/mcord/cni-config/03-network-definition.yaml b/helm-charts/mcord/cni-config/03-network-definition.yaml new file mode 100644 index 0000000..df9bf5e --- /dev/null +++ b/helm-charts/mcord/cni-config/03-network-definition.yaml @@ -0,0 +1,69 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +--- +apiVersion: "k8s.cni.cncf.io/v1" +kind: NetworkAttachmentDefinition +metadata: + name: s1u-net + annotations: + k8s.v1.cni.cncf.io/resourceName: intel.com/sriov +spec: + config: '{ + "type": "sriov", + "name": "s1u-net", + "ipam": { + "type": "centralip", + "ipType": "cluster", + "etcdURL": "http://node1:32379", + "network": "119.0.0.0/24" + } +}' +--- +apiVersion: "k8s.cni.cncf.io/v1" +kind: NetworkAttachmentDefinition +metadata: + name: sgi-net + annotations: + k8s.v1.cni.cncf.io/resourceName: intel.com/sriov +spec: + config: '{ + "type": "sriov", + "name": "sgi-net", + "ipam": { + "type": "centralip", + "ipType": "cluster", + "etcdURL": "http://node1:32379", + "network": "13.0.0.0/24" + } +}' +--- +apiVersion: "k8s.cni.cncf.io/v1" +kind: NetworkAttachmentDefinition +metadata: + name: bbu-net + annotations: + k8s.v1.cni.cncf.io/resourceName: intel.com/sriov +spec: + config: '{ + "type": "sriov", + "name": "bbu-net", + "ipam": { + "type": "centralip", + "ipType": "cluster", + "etcdURL": "http://node1:32379", + "network": "116.0.0.0/24" + } +}' diff --git a/helm-charts/mcord/cni-config/04-sriov-device-plugin-configmap.yaml b/helm-charts/mcord/cni-config/04-sriov-device-plugin-configmap.yaml new file mode 100644 index 0000000..a5f9d20 --- /dev/null +++ b/helm-charts/mcord/cni-config/04-sriov-device-plugin-configmap.yaml @@ -0,0 +1,92 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: multus-scripts + namespace: kube-system +data: + install-certs.sh: | + # Copied from Calico + # https://github.com/projectcalico/cni-plugin/blob/master/k8s-install/scripts/install-cni.sh + touch /host/etc/cni/net.d/multus-kubeconfig + chmod 600 /host/etc/cni/net.d/multus-kubeconfig + SERVICE_ACCOUNT_PATH=/var/run/secrets/kubernetes.io/serviceaccount + KUBE_CA_FILE=$SERVICE_ACCOUNT_PATH/ca.crt + TLS_CFG="certificate-authority-data: $(cat $KUBE_CA_FILE | base64 | tr -d '\n')" + SERVICEACCOUNT_TOKEN=$(cat $SERVICE_ACCOUNT_PATH/token) + cat > /host/etc/cni/net.d/multus-kubeconfig < /host/etc/cni/net.d/00-multus.conf < ${SHARED_DIR}/SGW_S1U_IP + else #dev --vdev af_packt + echo "vdev (AF_PACKET)" + # set the variables we provide + SGW_S1U_IP=$(netstat -ie | grep -A1 s1u-net | tail -1 | awk '{print $2}' | tr -d addr:) + SGW_SGI_IP=$(netstat -ie | grep -A1 sgi-net | tail -1 | awk '{print $2}' | tr -d addr:) + S1U_MAC=$( netstat -ie | grep -B1 $SGW_S1U_IP | head -n1 | awk '{print $5}' ) + SGI_MAC=$( netstat -ie | grep -B1 $SGW_SGI_IP | head -n1 | awk '{print $5}' ) + + DEVICES="--no-pci --vdev eth_af_packet0,iface=s1u-net --vdev eth_af_packet1,iface=sgi-net" + fi + + if [ ! -d "/dev/hugepages" ]; then + MEMORY="--no-huge -m $((MEM_LIMIT-1024))" + fi + + CORES="-c $(taskset -p $$ | awk '{print $NF}')" + SPGW_CFG="--spgw_cfg 03" + EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}" + + S1U="--s1u_ip ${SGW_S1U_IP} --s1u_mac ${S1U_MAC}" + SGI="--sgi_ip ${SGW_SGI_IP} --sgi_mac ${SGI_MAC} --sgi_gw_ip ${RTR_SGI_IP} --sgi_mask ${SGI_MASK}" + WORKERS="--num_workers 1" + MISC="--log 1" + APP_ARGS="${S1U} ${SGI} ${WORKERS} ${MISC} ${SPGW_CFG}" + interface.cfg: | + [0] + dp_comm_ip = {{ .Values.spgwu_s11_ip }} + dp_comm_port = {{ .Values.spgwu_port }} + cp_comm_ip = 127.0.0.1 + cp_comm_port = 21 + meter_profile.cfg: | + [GLOBAL] + NUM_OF_IDX = 7 + + [ENTRY_1] + ;Committed Information Rate (CIR). Measured in bytes per second. + ;MBR is mapped into CIR, convert MBR from bits to Bytes and set CIR. + CIR = 2342400 + ;Committed Burst Size unit = Bytes + CBS = 5856 + ;Excess Burst Size unit = Bytes + EBS = 11712 + ;Meter profile index. Refer this index in static_pcc.cfg to set AMBR/MBR + MTR_PROFILE_IDX = 3 + + [ENTRY_2] + ;1200 = 1756800 + ;1400 = 2049600 + ;1600 = 2342400 + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 4 + + [ENTRY_3] + ; QCI5,QCI7 15.571kbps = 1947 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 5 + + [ENTRY_4] + ; QCI1, 44kbps = 5500 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 6 + + [ENTRY_5] + ; QCI9, 31.143kbps = 3893 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 7 + + [ENTRY_6] + ; 128B, 7pps + CIR = 2342400 + CBS = 512 + EBS = 1024 + MTR_PROFILE_IDX = 8 + + [ENTRY_7] + ; 128B, 2pps + CIR = 2342400 + CBS = 512 + EBS = 1024 + MTR_PROFILE_IDX = 9 + + pcc_rules.cfg: | + [GLOBAL] + NUM_PCC_FILTERS = 9 + ;To config AMBR/MBR values refer meter_profile.cfg. specify only the + ;meter profile index to be set here. + UL_AMBR_MTR_PROFILE_IDX = 3 + DL_AMBR_MTR_PROFILE_IDX = 4 + + ;default filter - must be first for now (until DP doesn't install any filters) + ;associated with default adc rule + [PCC_FILTER_1] + RULE_NAME = DefaultRule + RATING_GROUP = 9 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 1 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 254 + DROP_PKT_COUNT = 0 + ;Specify the meter profile index from meter_profile.cfg + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of ADC filter indices + SDF_FILTER_IDX = 99998 + + [PCC_FILTER_2] + RULE_NAME = sdf_rule_1 + RATING_GROUP = 5 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 2 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 1 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 5 + DL_MBR_MTR_PROFILE_IDX = 5 + ;List of SDF filter indices + SDF_FILTER_IDX = 1 + + [PCC_FILTER_3] + RULE_NAME = sdf_rule_2 + RATING_GROUP = 1 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 3 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 18 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 6 + DL_MBR_MTR_PROFILE_IDX = 6 + ;List of SDF filter indices + SDF_FILTER_IDX = 2 + + [PCC_FILTER_4] + RULE_NAME = adc_rule_1 + RATING_GROUP = Zero-Rate + SERVICE_ID = Internet + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 8 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + REDIRECT_INFO = 0 + SPONSOR_ID = Example + PRECEDENCE = 15 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 1 + + [PCC_FILTER_5] + RULE_NAME = adc_rule_2 + RATING_GROUP = 0 + SERVICE_ID = CIPA + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 9 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 4 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 0 + DL_MBR_MTR_PROFILE_IDX = 0 + ;List of SDF filter indices + ADC_FILTER_IDX = 2 + + [PCC_FILTER_6] + RULE_NAME = sdf_rule_3 + RATING_GROUP = 7 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 4 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 17 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 5 + DL_MBR_MTR_PROFILE_IDX = 5 + ;List of SDF filter indices + SDF_FILTER_IDX = 3 + + [PCC_FILTER_7] + RULE_NAME = adc_rule_3 + RATING_GROUP = Zero-Rate + SERVICE_ID = Internet + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 5 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 210 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 4 + + [PCC_FILTER_8] + RULE_NAME = adc_rule_4 + RATING_GROUP = Zero-Rate + SERVICE_ID = Management + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 6 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 200 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 12 + + [PCC_FILTER_9] + RULE_NAME = adc_rule_5 + RATING_GROUP = Zero-Rate + SERVICE_ID = Provisioning + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 7 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 220 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 3 + sdf_rules.cfg: | + [GLOBAL] + NUM_SDF_FILTERS = 4 + + [SDF_FILTER_1] + DIRECTION = downlink_only + IPV4_REMOTE = 13.2.1.113 + IPV4_REMOTE_MASK = 255.255.255.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 0 + LOCAL_HIGH_LIMIT_PORT = 65535 + REMOTE_LOW_LIMIT_PORT = 0 + REMOTE_HIGH_LIMIT_PORT = 65535 + + [SDF_FILTER_2] + DIRECTION = uplink_only + IPV4_LOCAL = 16.255.255.0 + IPV4_LOCAL_MASK = 255.255.255.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 0 + LOCAL_HIGH_LIMIT_PORT = 65535 + REMOTE_LOW_LIMIT_PORT = 0 + REMOTE_HIGH_LIMIT_PORT = 65535 + + [SDF_FILTER_3] + DIRECTION = downlink_only + IPV4_REMOTE = 130.10.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + REMOTE_LOW_LIMIT_PORT = 5060 + REMOTE_HIGH_LIMIT_PORT = 5060 + + [SDF_FILTER_4] + DIRECTION = uplink_only + IPV4_REMOTE = 103.1.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 17000 + LOCAL_HIGH_LIMIT_PORT = 17010 + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: cassandra +data: + cassandra-rackdc.properties: | + dc=DC1 + rack=RAC1 + prefer_local=true +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: hss +data: + acl.conf: | + ALLOW_OLD_TLS *.cluster.local + hss.conf: | + # -------- Local --------- + # The first parameter in this section is Identity, which will be used to + # identify this peer in the Diameter network. The Diameter protocol mandates + # that the Identity used is a valid FQDN for the peer. This parameter can be + # omitted, in that case the framework will attempt to use system default value + # (as returned by hostname --fqdn). + Identity = "HSS_IDENTITY"; + + # In Diameter, all peers also belong to a Realm. If the realm is not specified, + # the framework uses the part of the Identity after the first dot. + Realm = "HSS_REALM"; + + + # This parameter is mandatory, even if it is possible to disable TLS for peers + # connections. A valid certificate for this Diameter Identity is expected. + TLS_Cred = "./conf/HSS_HOST.cert.pem", "./conf/HSS_HOST.key.pem"; + TLS_CA = "./conf/cacert.pem"; + + + # Disable use of TCP protocol (only listen and connect in SCTP) + # Default : TCP enabled + No_SCTP; + + + # This option is ignored if freeDiameter is compiled with DISABLE_SCTP option. + # Prefer TCP instead of SCTP for establishing new connections. + # This setting may be overwritten per peer in peer configuration blocs. + # Default : SCTP is attempted first. + Prefer_TCP; + + + # Disable use of IPv6 addresses (only IP) + # Default : IPv6 enabled + No_IPv6; + + + # Overwrite the number of SCTP streams. This value should be kept low, + # especially if you are using TLS over SCTP, because it consumes a lot of + # resources in that case. See tickets 19 and 27 for some additional details on + # this. + # Limit the number of SCTP streams + SCTP_streams = 3; + + + # By default, freeDiameter acts as a Diameter Relay Agent by forwarding all + # messages it cannot handle locally. This parameter disables this behavior. + NoRelay; + + + # Use RFC3588 method for TLS protection, where TLS is negociated after CER/CEA exchange is completed + # on the unsecure connection. The alternative is RFC6733 mechanism, where TLS protects also the + # CER/CEA exchange on a dedicated secure port. + # This parameter only affects outgoing connections. + # The setting can be also defined per-peer (see Peers configuration section). + # Default: use RFC6733 method with separate port for TLS. + + #TLS_old_method; + + + # Number of parallel threads that will handle incoming application messages. + # This parameter may be deprecated later in favor of a dynamic number of threads + # depending on the load. + AppServThreads = 4; + + # Specify the addresses on which to bind the listening server. This must be + # specified if the framework is unable to auto-detect these addresses, or if the + # auto-detected values are incorrect. Note that the list of addresses is sent + # in CER or CEA message, so one should pay attention to this parameter if some + # adresses should be kept hidden. + #ListenOn = "127.0.0.1"; + + Port = {{ .Values.hss.ports.s6a }}; + SecPort = {{ .Values.hss.ports.secs6a }}; + + LoadExtension = "acl_wl.fdx" : "./conf/acl.conf"; + + # -------- Extensions --------- + + #LoadExtension = "/usr/local/lib/freeDiameter/_sample.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/app_acct.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/app_diameap.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/app_radgw.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/app_redirect.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/app_sip.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dbg_interactive.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dbg_monitor.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dbg_msg_dumps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dbg_msg_timings.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dbg_rt.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_3gpp2_avps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_CreditControl.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_CxDx.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Gx.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_NAS.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Ro.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Rx.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_S6mS6n.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_SGd.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_SLh.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Sd.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Sh.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_T4.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_T6aT6bT7.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Tsp.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca_3gpp.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca_starent.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_draftload_avps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_eap.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_etsi283034_avps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_legacy_xml.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_mip6a.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_mip6i.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_nas_mipv6.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_nasreq.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4004_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4006bis_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4072_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4590_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5447_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5580_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5777_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5778_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6734_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6942_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7155_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7683_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7944_avps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_sip.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29061_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29128_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29154_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29173_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29212_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29214_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29215_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29217_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29229_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29272_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29273_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29329_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29336_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29337_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29338_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29343_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29344_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29345_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29368_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29468_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts32299_avps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/rt_busypeers.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/rt_default.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/rt_ereg.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/rt_ignore_dh.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/rt_load_balance.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/rt_randomize.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/rt_redirect.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/test_acct.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/test_app.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/test_hss.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/test_netemul.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/test_rt_any.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/test_sip.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Rf.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6as6d.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6t.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6c.fdx"; + + + # Load RFC4072 dictionary objects + #LoadExtension = "dict_eap.fdx"; + + # Load the Diameter EAP server extension (requires diameap.conf) + #LoadExtension = "app_diameap.fdx" : "diameap.conf"; + + # Load the Accounting Server extension (requires app_acct.conf) + #LoadExtension = "app_acct.fdx" : "app_acct.conf"; + + # -------- Peers --------- + + # The framework will actively attempt to establish and maintain a connection + # with the peers listed here. + # For only accepting incoming connections, see the acl_wl.fx extension. + + #ConnectPeer = "peer1.localdomain" { ConnectTo = "127.0.0.1"; }; + hss.json: | + {"common": { + "fdcfg": "conf/hss.conf", + "originhost": "HSS_IDENTITY", + "originrealm": "HSS_REALM" + }, + "hss": { + "gtwhost": "*", + "gtwport" : 9080, + "restport" : 9081, + "casssrv": "CASSANDRA_ADDR", + "cassusr": "root", + "casspwd": "root", + "cassdb" : "vhss", + "randv" : true, + "optkey" : "63bfa50ee6523365ff14c1f45f88737d", + "reloadkey" : true + } + } + launch.sh: | + #!/bin/bash + + cd /opt/c3po/hss + cp /etc/hss/conf/{acl.conf,hss.json,hss.conf} conf + + HSS_HOST=$(hostname) + HSS_DOMAIN=$(dnsdomainname) + CASSANDRA_ADDR=${CASSANDRA_ADDR:-localhost} + + # from hss.json + sed -i "s/HSS_IDENTITY/$HSS_HOST.$HSS_DOMAIN/g" conf/hss.json + sed -i "s/HSS_REALM/$HSS_DOMAIN/g" conf/hss.json + sed -i "s/CASSANDRA_ADDR/$CASSANDRA_ADDR/g" conf/hss.json + + # from hss.conf + sed -i "s/HSS_IDENTITY/$HSS_HOST.$HSS_DOMAIN/g" conf/hss.conf + sed -i "s/HSS_REALM/$HSS_DOMAIN/g" conf/hss.conf + sed -i "s/HSS_HOST/$HSS_HOST/g" conf/hss.conf + + # If necessary, calculate the OPc value for each UE (User Equipment). + #./bin/hss -j conf/hss.json --onlyloadkey + + cd conf + make_certs.sh $(hostname) $(dnsdomainname) + cd .. + + # finally, launch + hss -j conf/hss.json +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: mme +data: + launch.sh: | + #!/bin/bash + + cd /opt/c3po/mme/bin + cp /etc/mme/conf/{vbsm_cfg.txt,vbfd.conf} . + + # from vbsm_cfg.txt + SGW_S11_IP=${SGW_S11_IP:-sgw.localdomain} + ENB_S1AP_IP=${ENB_S1AP_IP:-enb1.localdomain} + ENB_S1AP_PORT=${ENB_S1AP_PORT:-36412} + MME_ETH0_IP=${MME_ETH0_IP:-0.0.0.0} + + # from vbfd.conf + CONNECT_PEER=${CONNECT_PEER:-hss.localdomain} + HSS_S6A_IP=${HSS_S6A_IP:-hss.localdomain} + HSS_PORT=${HSS_PORT:-3868} + VAR_HSS_REALM=${VAR_HSS_REALM:-openair4G.eur} + + + sed -i "s/SGW_S11_IP/$(dig $SGW_S11_IP +short)/g" vbsm_cfg.txt + sed -i "s/ENB_S1AP_IP/$ENB_S1AP_IP/g" vbsm_cfg.txt + sed -i "s/ENB_S1AP_PORT/$ENB_S1AP_PORT/g" vbsm_cfg.txt + sed -i "s/MME_ETH0_IP/$MME_ETH0_IP/g" vbsm_cfg.txt + sed -i "s/VAR_HSS_HOST/$CONNECT_PEER/g" vbsm_cfg.txt + sed -i "s/VAR_HSS_REALM/$VAR_HSS_REALM/g" vbsm_cfg.txt + + + MME_HOST=$(hostname) + MME_DOMAIN=$(dnsdomainname) + sed -i "s/CONNECT_PEER/$CONNECT_PEER/g" vbfd.conf + sed -i "s/HSS_S6A_IP/$HSS_S6A_IP/g" vbfd.conf + sed -i "s/HSS_PORT/$HSS_PORT/g" vbfd.conf + sed -i "s/MME_IDENTITY/$MME_HOST.$MME_DOMAIN/g" vbfd.conf + sed -i "s/MME_REALM/$MME_DOMAIN/g" vbfd.conf + sed -i "s/MME_HOST/$MME_HOST/g" vbfd.conf + + # generate the certs + # ./make_certs.sh mme localdomain + ./make_certs.sh $MME_HOST $MME_DOMAIN + + + # finally, launch + ./vb_acc + vbfd.conf: | + # -------- Test configuration --------- + + # Identity = "."; + Identity = "MME_IDENTITY"; + Realm = "MME_REALM"; + # Port = 3868; + # SecPort = 3869; + + ConnectPeer = "CONNECT_PEER" { ConnectTo = "HSS_S6A_IP"; No_TLS; port = HSS_PORT; }; + + # TLS_Cred = ".cert.pem", ".key.pem"; + TLS_Cred = "MME_HOST.cert.pem", + "MME_HOST.key.pem"; + TLS_CA = "cacert.pem"; + + LoadExtension = "/usr/local/lib/freeDiameter/dict_3gpp2_avps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_CreditControl.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_base_rfc6733.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_draftload_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_etsi283034_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4004_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4006bis_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4072_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4590_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5447_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5580_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5777_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5778_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6734_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6942_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7155_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7683_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7944_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29061_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29128_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29154_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29173_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29212_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29214_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29215_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29217_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29229_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29272_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29273_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29329_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29336_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29337_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29338_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29343_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29344_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29345_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29368_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29468_avps.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_ts32299_avps.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_CxDx.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Gx.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_NAS.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Rf.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Ro.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Rx.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6as6d.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6c.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_S6mS6n.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_S6t.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_S9.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_SGd.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_SLh.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Sd.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Sh.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_T4.fdx"; + LoadExtension = "/usr/local/lib/freeDiameter/dict_T6aT6bT7.fdx"; + #LoadExtension = "/usr/local/lib/freeDiameter/dict_Tsp.fdx"; + vbsm_cfg.txt: | + # Configuration file for MME + + ##### NOTE: Please Do NOT change the order of the parameters ##### + + # EGTP related + VBSM_EG_DFLT_PORT 2123 # EGTP Default port + VBSM_EG_NONDFLT_PORT 2124 # EGTP Non Default port + VBSM_EG_S10_NONDFLT_PORT 2125 # EGTP Non Default + VBSM_EG_S3_NONDFLT_PORT 2126 # EGTP Non Default port for S3 interface towards SGSN + # port for S10 + VBSM_EG_DFLT_HOST_NAME "sutlej.ccin.ccpu.com" # EGTP host name + + + # E-NodeB related + VBSM_ENB_ADDR_1 "ENB_S1AP_IP" # IP address of eNodeB + VBSM_ENB_PORT_1 "ENB_S1AP_PORT" # eNodeB port + #VBSM_ENB_ADDR_2 "172.26.20.180" # IP address of eNodeB + #VBSM_ENB_PORT_2 36422 # eNodeB port + + # MME related + VBSM_MME_IPADDR "MME_ETH0_IP" # MME IP address + VBSM_MME_S1AP_IPADDR "MME_ETH0_IP" # MME IP address associated with the S1AP interface + VBSM_MME_EGTP_IPADDR "MME_ETH0_IP" # MME IP address associated with the EGTP interface + VBSM_MME_SCTP_PORT {{ .Values.mme.ports.s1ap }} # MME SCTP port + + VBSM_SGW_IPADDR "SGW_S11_IP" # SGW IP address + VBSM_PGW_IPADDR "192.168.1.105" # PDN-GW IP address + + VBSM_UE_NUM 1000 # Support 1000 UE's + VBSM_SCTP_UDP_SERV_TYPE 0 #service type,default 0 SCTP + + # Debug mask to be set; each represent + #different debug masks to be set (1 and 0 to unset) + #in the form |LVB_DBGMASK_INFO|LVB_DBGMASK_ERROR|LVB_DBGMASK_TRC|LVB_DBGMASK_MEM + + VBSM_MME_DBG_MASK 1111 + VBSM_DBG_MASK 1111 + VBSM_NW_INIATED_DETACH_TIMER 1000 + + VBSM_MCC_DIG1 3 + VBSM_MCC_DIG2 0 + VBSM_MCC_DIG3 2 + + VBSM_MNC_DIG1 7 + VBSM_MNC_DIG2 2 + VBSM_MNC_DIG3 0 + + # Target PLMN ID format [ MCC + MNC], + is concatination operator + # If MNC has two digits, the last charater shall be 'f' + # Valid Configurations: 11223f, 112345. + VBSM_TARGET_MME_PLMN_ID 31310f + VBSM_TARGET_MME_IP_ADDR "192.25.1.100" + + VBSM_T3412 0 + + VBSM_SGSN_IP_ADDR "192.25.1.195" + + + VBSM_SGSN_PLMN_ID 31311f + + VBSM_FD_CFG "vbfd.conf" + VBSM_HSS_HOST "VAR_HSS_HOST" + VBSM_HSS_REALM "VAR_HSS_REALM" + + # set VBSM_DISABLE_EPC_DNS 0 - enable DNS, 1 - disable DNS + VBSM_DISABLE_EPC_DNS 1 + VBSM_DISABLE_EIA0 1 + VBSM_REL_CAP 1 + VBSM_MME_NAME "vmmestandalone" + VBSM_S1C_SCTP_INSTREAMS 10 + VBSM_S1C_SCTP_OUTSTREAMS 10 + VBSM_MAX_ENB 2 + VBSM_NO_OFGUMMEIS 1 + VBSM_MMECODE 1 + VBSM_MMEGRPID 1 + VBSM_NO_OF_TAI 1 + VBSM_TAI_LIST {{"{{ 1,2,0,8,0,1,1 }}"}} + + VBSM_SMS_ROUTER_HOST "smsrouter.test3gpp.net" + VBSM_SMS_ROUTER_REALM "test3gpp.net" diff --git a/helm-charts/mcord/mcord-control-plane/templates/cp.yaml b/helm-charts/mcord/mcord-control-plane/templates/cp.yaml new file mode 100644 index 0000000..37ae75f --- /dev/null +++ b/helm-charts/mcord/mcord-control-plane/templates/cp.yaml @@ -0,0 +1,133 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +--- +apiVersion: v1 +kind: Service +metadata: + name: ngic-cp +spec: + selector: + app: ngic-cp + clusterIP: None + ports: + - name: s11 + port: {{ .Values.ngic_cp.ports.s11 }} + protocol: UDP + - name: sx + port: {{ .Values.ngic_cp.ports.sx }} + protocol: UDP +--- +apiVersion: v1 +kind: Service +metadata: + name: ngic-cp-external +spec: + selector: + app: ngic-cp + type: NodePort + ports: + - name: sx + port: {{ .Values.ngic_cp.ports.sx }} + nodePort: {{ .Values.ngic_cp.ports.sx_external }} + protocol: UDP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ngic-cp + labels: + app: ngic-cp +spec: + replicas: {{ .Values.ngic_cp.replicas }} + selector: + matchLabels: + app: ngic-cp + serviceName: "ngic-cp" + template: + metadata: + labels: + app: ngic-cp + spec: + nodeSelector: + kubernetes.io/hostname: "{{ .Values.spgwc_node_selector }}" + initContainers: + - name: init-iptables + image: {{ .Values.ngic_cp.images.init }} + command: [ "sh", "-c"] + securityContext: + capabilities: + add: + - NET_ADMIN + args: + - iptables -I OUTPUT -p icmp --icmp-type destination-unreachable -j DROP; + terminationGracePeriodSeconds: 1 + containers: + - name: ngic + image: {{ .Values.ngic_cp.images.cp }} + imagePullPolicy: IfNotPresent + stdin: true + command: [ "bash", "-xc" ] + args: + - . /opt/ngic/config/cp_config.cfg; + sleep 20; + ./ngic_controlplane $EAL_ARGS -- $APP_ARGS; + tty: true + env: + - name: MME_S11_IP + value: {{ .Values.mme_hostname }} + - name: SGW_S11_IP + value: {{ .Values.spgwc_hostname }} + - name: SGW_S1U_IP + value: {{ .Values.spgwu_s1u_ip }} + - name: APN + value: {{ .Values.ngic_cp.config.apn }} + - name: IP_POOL_IP + value: "{{ .Values.ngic_cp.config.ue_ip_pool }}" + - name: IP_POOL_MASK + value: "{{ .Values.ngic_cp.config.ue_ip_pool_mask }}" + - name: S11_TEID_POOL_START + value: "00100000" + - name: S11_TEID_POOL_STOP + value: "001fffff" + - name: S1U_TEID_POOL_START + value: "00100000" + - name: S1U_TEID_POOL_STOP + value: "001fffff" + - name: MEM_LIMIT + valueFrom: + resourceFieldRef: + containerName: ngic + resource: limits.memory + divisor: 1Mi + volumeMounts: + - name: config-volume + mountPath: /opt/ngic/config + #- name: hugepage + # mountPath: /dev/hugepages + - name: shared-data + mountPath: /opt/ngic/config/shared + resources: + limits: + #hugepages-1Gi: 4Gi + cpu: {{ .Values.ngic_cp.resources.cpu }} + memory: {{ .Values.ngic_cp.resources.mem }} + volumes: + - name: config-volume + configMap: + name: ngiccp-config + - name: shared-data + emptyDir: {} diff --git a/helm-charts/mcord/mcord-control-plane/templates/hss.yaml b/helm-charts/mcord/mcord-control-plane/templates/hss.yaml new file mode 100644 index 0000000..9dd3918 --- /dev/null +++ b/helm-charts/mcord/mcord-control-plane/templates/hss.yaml @@ -0,0 +1,93 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +--- +apiVersion: v1 +kind: Service +metadata: + name: hss +spec: + selector: + app: hss + clusterIP: None + ports: + - name: s6a + port: {{ .Values.hss.ports.s6a }} + protocol: TCP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: hss + labels: + app: hss +spec: + replicas: {{ .Values.hss.replicas }} + selector: + matchLabels: + app: hss + serviceName: "hss" + template: + metadata: + labels: + app: hss + spec: + nodeSelector: + kubernetes.io/hostname: "{{ .Values.hss_node_selector }}" + terminationGracePeriodSeconds: 1 + initContainers: + - name: init-db + image: {{ .Values.hss.images.init }} + command: ["bash", "-xc"] + args: + - until nslookup {{ .Values.hssdb_hostname }}; do echo "waiting for cassandra domain name resolve."; sleep 2; done; + until cqlsh -e "show version" {{ .Values.hssdb_hostname }}; do echo "waiting for cassandra database ready."; sleep 2; done; + until cqlsh --file /scripts/oai_db.cql {{ .Values.hssdb_hostname }}; do echo "Writing data into database failed. Retrying ..."; sleep 2; done; + /scripts/data_provisioning_users.sh 302720100000420 1122334456 apn1 6226194254742F2D67145153602F7C8D 1 {{ .Values.hssdb_hostname }} {{ .Values.mme_hostname }} {{ .Values.mme_hostname }}; + /scripts/data_provisioning_users.sh 302720100000421 1122334456 apn1 6226194254742F2D67145153602F7C8D 1 {{ .Values.hssdb_hostname }} {{ .Values.mme_hostname }} {{ .Values.mme_hostname }}; + cqlsh -e "use vhss; update users_imsi set opc='D6CAF10C337FD65AC31A18EBACBF5BF9' where imsi='302720100000420';" {{ .Values.hssdb_hostname }}; + cqlsh -e "use vhss; update users_imsi set opc='D6CAF10C337FD65AC31A18EBACBF5BF9' where imsi='302720100000421';" {{ .Values.hssdb_hostname }}; + /scripts/data_provisioning_mme.sh 1 19136246000 mme-0.{{ .Values.mme_hostname }}.{{ .Values.namespace }}.svc.cluster.local {{ .Values.mme_hostname }}.{{ .Values.namespace }}.svc.cluster.local 1 {{ .Values.hssdb_hostname }}; + /scripts/data_provisioning_mme.sh 1 19136246000 smsrouter.test3gpp.net test3gpp.net 0 {{ .Values.hssdb_hostname }}; + containers: + - name: hss + image: {{ .Values.hss.images.hss }} + imagePullPolicy: Always + env: + - name: CASSANDRA_ADDR + value: {{ .Values.hssdb_hostname }} + - name: MME_ADDR + value: mme-0.{{ .Values.mme_hostname }}.{{ .Values.namespace }}.svc.cluster.local + #command: [ "sleep", "3600"] + resources: + limits: + cpu: {{ .Values.hss.resources.cpu }} + memory: {{ .Values.hss.resources.mem }} + volumeMounts: + - name: hss-script + mountPath: /opt/c3po/hss/launch.sh + subPath: launch.sh + - name: hss-config + mountPath: /etc/hss/conf + volumes: + - name: hss-script + configMap: + name: hss + defaultMode: 493 + - name: hss-config + configMap: + name: hss + defaultMode: 420 diff --git a/helm-charts/mcord/mcord-control-plane/templates/mme.yaml b/helm-charts/mcord/mcord-control-plane/templates/mme.yaml new file mode 100644 index 0000000..9685c82 --- /dev/null +++ b/helm-charts/mcord/mcord-control-plane/templates/mme.yaml @@ -0,0 +1,121 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +--- +apiVersion: v1 +kind: Service +metadata: + name: mme +spec: + selector: + app: mme + clusterIP: None + ports: + - name: s1ap + port: {{ .Values.mme.ports.s1ap }} + protocol: SCTP +--- +apiVersion: v1 +kind: Service +metadata: + name: mme-external +spec: + selector: + app: mme + type: NodePort + ports: + - name: s1ap + port: {{ .Values.mme.ports.s1ap }} + nodePort: {{ .Values.mme.ports.s1ap_external }} + protocol: SCTP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mme + labels: + app: mme +spec: + replicas: {{ .Values.mme.replicas }} + selector: + matchLabels: + app: mme + serviceName: "mme" + template: + metadata: + labels: + app: mme + spec: + nodeSelector: + kubernetes.io/hostname: "{{ .Values.mme_node_selector }}" + terminationGracePeriodSeconds: 1 + initContainers: + - name: init-mme + image: {{ .Values.mme.images.init }} + command: [ "sh", "-c"] + securityContext: + privileged: true + capabilities: + add: + - NET_ADMIN + args: + - until nslookup {{ .Values.hss_hostname }}; do echo waiting for hss; sleep 2; done; + iptables -A OUTPUT -p sctp --sport {{ .Values.mme.ports.s1ap }} --chunk-types any ABORT -j DROP; + containers: + - name: mme + image: {{ .Values.mme.images.mme }} + imagePullPolicy: Always + env: + - name: SGW_S11_IP + value: {{ .Values.spgwc_hostname }}.{{ .Values.namespace }}.svc.cluster.local + - name: MME_ETH0_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: ENB_S1AP_IP + value: {{ .Values.accelleran_hostname }} + - name: ENB_S1AP_PORT + value: "{{ .Values.accelleran_port }}" #ng4t uses 32767 + - name: CONNECT_PEER + value: hss-0.{{ .Values.hss_hostname }}.{{ .Values.namespace }}.svc.cluster.local + - name: VAR_HSS_REALM + value: {{ .Values.hss_hostname }}.{{ .Values.namespace }}.svc.cluster.local + - name: HSS_S6A_IP + value: hss-0.{{ .Values.hss_hostname }}.{{ .Values.namespace }}.svc.cluster.local + - name: HSS_PORT + value: "{{ .Values.mme.ports.s6a }}" + stdin: true + tty: true + #command: [ "sleep", "3600"] + resources: + limits: + cpu: {{ .Values.mme.resources.cpu }} + memory: {{ .Values.mme.resources.mem }} + volumeMounts: + - name: mme-script + mountPath: /opt/c3po/mme/bin/launch.sh + subPath: launch.sh + - name: mme-config + mountPath: /etc/mme/conf + volumes: + - name: mme-script + configMap: + name: mme + defaultMode: 493 + - name: mme-config + configMap: + name: mme + defaultMode: 420 diff --git a/helm-charts/mcord/mcord-control-plane/values.yaml b/helm-charts/mcord/mcord-control-plane/values.yaml new file mode 100644 index 0000000..e226c0f --- /dev/null +++ b/helm-charts/mcord/mcord-control-plane/values.yaml @@ -0,0 +1,88 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +# Default values for mcord-vepc-helm. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +hssdb_hostname: "cassandra" +hss_hostname: "hss" +mme_hostname: "mme" +spgwc_hostname: "ngic-cp" +# If the control plane is installed in a separate cluster, this value needs to be overridden +# DP installed on LOCAL node3 +spgwu_s11_ip: "10.90.0.133" +# The spgwu_s1u_ip changes everytime, you can get it with this command: +# ngic_sriov=$(kubectl exec -n epc ngic-dp-0 ifconfig s1u-net | grep 'inet addr' | cut -d: -f2 | awk '{print $1}') +# and use it in the chart with --set spgwu_s1u_ip=$ngic_sriov +spgwu_s1u_ip: "119.0.0.45" +spgwu_port: 31310 +# BBU is allocated on LOCAL's node2, use node2's IP +accelleran_hostname: "10.90.0.132" +accelleran_port: 31412 + +hssdb_node_selector: node3 +hss_node_selector: node3 +mme_node_selector: node2 +spgwc_node_selector: node2 + + +hss: + # TODO: init UE's IMEI to DB? + images: + init: "node1:30500/ngick8stesting/c3po-cassandra:5e2eaf6" + hss: "node1:30500/ngick8stesting/c3po-hss:5e2eaf6" + ports: + s6a: 3868 + secs6a: 5868 + replicas: 1 + resources: + cpu: 3 + mem: "1Gi" + +mme: + images: + init: "ngick8stesting/c3po-mmeinit" + mme: "ngick8stesting/c3po-mme:mwca-mme-debug" + ports: + s11: 2123 + s1ap: 36412 + s6a: 3868 + s1ap_external: 31412 + replicas: 1 + enb_s1ap_ip: "119.0.0.10" + resources: + cpu: 3 + mem: "1Gi" + +ngic_cp: + images: + init: "ngick8stesting/c3po-mmeinit" + cp: "node1:30500/ngick8stesting/ngic-cp:690f418" + replicas: 1 + ports: + s11: 2123 + sx: 21 + sx_external: 31311 + config: + apn: "apn1" + ue_ip_pool: "16.0.0.0" + ue_ip_pool_mask: "255.240.0.0" + resources: + cpu: 3 + mem: "5Gi" + +namespace: epc diff --git a/helm-charts/mcord/mcord-data-plane/.helmignore b/helm-charts/mcord/mcord-data-plane/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/mcord/mcord-data-plane/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/mcord/mcord-data-plane/Chart.yaml b/helm-charts/mcord/mcord-data-plane/Chart.yaml new file mode 100644 index 0000000..fcdd445 --- /dev/null +++ b/helm-charts/mcord/mcord-data-plane/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for MCORD Data Plane Services +name: mcord-data-plane +version: 0.3.1 diff --git a/helm-charts/mcord/mcord-data-plane/templates/_helpers.tpl b/helm-charts/mcord/mcord-data-plane/templates/_helpers.tpl new file mode 100644 index 0000000..4a4907e --- /dev/null +++ b/helm-charts/mcord/mcord-data-plane/templates/_helpers.tpl @@ -0,0 +1,48 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation +Copyright 2018 Intel Corporation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "mcord-dp-helm.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 "mcord-dp-helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mcord-dp-helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/mcord/mcord-data-plane/templates/cm.yaml b/helm-charts/mcord/mcord-data-plane/templates/cm.yaml new file mode 100644 index 0000000..f2b7f7c --- /dev/null +++ b/helm-charts/mcord/mcord-data-plane/templates/cm.yaml @@ -0,0 +1,438 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: ngicdp-config +data: + adc_rules.cfg: | + [GLOBAL] + NUM_ADC_RULES = 5 + + ;FORMAT :: + ;ADC_TYPE : [ DOMAIN = 0 | IP = 1 | IP PREFIX =2 ] + ; + ;if ADC_TYPE = 0 + ; DOMAIN + ;elseif ADC_TYPE = 1 + ; IP + ;elseif ADC_TYPE = 2 + ; IP + ; PREFIX + ;else + ; NONE + ; + ;NOTE : + ;Rules defined first have a higher priority, unless DROP is specified + ;(i.e. multiple rules for the same IP). + ;When specifying DROP with an IP address, use a prefix of 32 to prevent DNS + ;results from overwriting rule. + + + [ADC_RULE_1] + ADC_TYPE = 2 + IP = 0.0.0.0 + PREFIX = 0 + + [ADC_RULE_2] + ADC_TYPE = 2 + IP = 13.1.1.0 + PREFIX = 24 + + [ADC_RULE_3] + ADC_TYPE = 1 + IP = 13.1.1.254 + + [ADC_RULE_4] + ADC_TYPE = 0 + DOMAIN = www.example.gov + + [ADC_RULE_5] + ADC_TYPE = 0 + DOMAIN = www.drop_example.com + cdr.cfg: | + CDR_PATH=./cdr + MASTER_CDR=./cdr/master.csv + cp_config.cfg: | + if [ ! -d "/dev/hugepages" ]; then + MEMORY="--no-huge -m $((MEM_LIMIT-1024))" + fi + + SGW_S1U_IP=$(netstat -ie | grep -A1 s1u-net | tail -1 | awk '{print $2}' | tr -d addr:) + SHARED_DIR="/opt/ngic/config/shared" + if [ -d ${SHARED_DIR} ]; then + while [ ! -f ${SHARED_DIR}/SGW_S1U_IP ]; do echo "Waiting for SGW_S1U_IP"; sleep 2; done + SGW_S1U_IP=$(cat ${SHARED_DIR}/SGW_S1U_IP) + fi + + SGW_S11_IP=$(hostname) + MGMT_INFO="-s ${SGW_S11_IP} -m ${MME_S11_IP} -w ${SGW_S1U_IP}" + APN_INFO="-i ${IP_POOL_IP} -p ${IP_POOL_MASK} -a ${APN}" + SPGW_CFG="-d 03 -l 2 -r 7.7.7.7 -g 6.6.6.6 -v 4.4.4.4 -u 5.5.5.5" + + TEID_INFO="-t ${S11_TEID_POOL_START} -e ${S11_TEID_POOL_STOP} -q ${S1U_TEID_POOL_START} -o ${S1U_TEID_POOL_STOP}" + APP_ARGS="${MGMT_INFO} ${APN_INFO} ${SPGW_CFG} ${TEID_INFO}" + + CORES="-c $(taskset -p $$ | awk '{print $NF}')" + DEVICES="--no-pci" + EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}" + dp_config.cfg: | + get_pcimac_addr () { + ifname=$1 + cid="$(sed -ne '/hostname/p' /proc/1/task/1/mountinfo | awk -F '/' '{print $6}' |tr -d " " )" + cid="$cid-$ifname" + eval "export $2=$(awk -F '"' '{print $4}' /sriov-cni/$cid)" + eval "export $3=$(awk -F '"' '{print $8}' /sriov-cni/$cid)" + eval "export $4=$(awk -F '"' '{print $12}' /sriov-cni/$cid)" + } + + if [ -d "/sriov-cni" ]; then + echo "================== SR-IOV FOUND ============" + get_pcimac_addr s1u-net SGW_S1U_PCI S1U_MAC SGW_S1U_IP + get_pcimac_addr sgi-net SGW_SGI_PCI SGI_MAC SGW_SGI_IP + DEVICES="-w $SGW_S1U_PCI -w $SGW_SGI_PCI" + SHARED_DIR="/opt/ngic/config/shared" + echo $SGW_S1U_IP > ${SHARED_DIR}/SGW_S1U_IP + else #dev --vdev af_packt + echo "vdev (AF_PACKET)" + # set the variables we provide + SGW_S1U_IP=$(netstat -ie | grep -A1 s1u-net | tail -1 | awk '{print $2}' | tr -d addr:) + SGW_SGI_IP=$(netstat -ie | grep -A1 sgi-net | tail -1 | awk '{print $2}' | tr -d addr:) + S1U_MAC=$( netstat -ie | grep -B1 $SGW_S1U_IP | head -n1 | awk '{print $5}' ) + SGI_MAC=$( netstat -ie | grep -B1 $SGW_SGI_IP | head -n1 | awk '{print $5}' ) + + DEVICES="--no-pci --vdev eth_af_packet0,iface=s1u-net --vdev eth_af_packet1,iface=sgi-net" + fi + + if [ ! -d "/dev/hugepages" ]; then + MEMORY="--no-huge -m $((MEM_LIMIT-1024))" + fi + + CORES="-c $(taskset -p $$ | awk '{print $NF}')" + SPGW_CFG="--spgw_cfg 03" + EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}" + + S1U="--s1u_ip ${SGW_S1U_IP} --s1u_mac ${S1U_MAC}" + SGI="--sgi_ip ${SGW_SGI_IP} --sgi_mac ${SGI_MAC} --sgi_gw_ip ${RTR_SGI_IP} --sgi_mask ${SGI_MASK}" + WORKERS="--num_workers 1" + MISC="--log 1" + APP_ARGS="${S1U} ${SGI} ${WORKERS} ${MISC} ${SPGW_CFG}" + interface.cfg: | + [0] + dp_comm_ip = 127.0.0.1 + dp_comm_port = 20 + cp_comm_ip = {{ .Values.controlplane_hostname }} + cp_comm_port = {{ .Values.controlplane_port }} + meter_profile.cfg: | + [GLOBAL] + NUM_OF_IDX = 7 + + [ENTRY_1] + ;Committed Information Rate (CIR). Measured in bytes per second. + ;MBR is mapped into CIR, convert MBR from bits to Bytes and set CIR. + CIR = 2342400 + ;Committed Burst Size unit = Bytes + CBS = 5856 + ;Excess Burst Size unit = Bytes + EBS = 11712 + ;Meter profile index. Refer this index in static_pcc.cfg to set AMBR/MBR + MTR_PROFILE_IDX = 3 + + [ENTRY_2] + ;1200 = 1756800 + ;1400 = 2049600 + ;1600 = 2342400 + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 4 + + [ENTRY_3] + ; QCI5,QCI7 15.571kbps = 1947 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 5 + + [ENTRY_4] + ; QCI1, 44kbps = 5500 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 6 + + [ENTRY_5] + ; QCI9, 31.143kbps = 3893 B + CIR = 2342400 + CBS = 5856 + EBS = 11712 + MTR_PROFILE_IDX = 7 + + [ENTRY_6] + ; 128B, 7pps + CIR = 2342400 + CBS = 512 + EBS = 1024 + MTR_PROFILE_IDX = 8 + + [ENTRY_7] + ; 128B, 2pps + CIR = 2342400 + CBS = 512 + EBS = 1024 + MTR_PROFILE_IDX = 9 + + pcc_rules.cfg: | + [GLOBAL] + NUM_PCC_FILTERS = 9 + ;To config AMBR/MBR values refer meter_profile.cfg. specify only the + ;meter profile index to be set here. + UL_AMBR_MTR_PROFILE_IDX = 3 + DL_AMBR_MTR_PROFILE_IDX = 4 + + ;default filter - must be first for now (until DP doesn't install any filters) + ;associated with default adc rule + [PCC_FILTER_1] + RULE_NAME = DefaultRule + RATING_GROUP = 9 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 1 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 254 + DROP_PKT_COUNT = 0 + ;Specify the meter profile index from meter_profile.cfg + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of ADC filter indices + SDF_FILTER_IDX = 99998 + + [PCC_FILTER_2] + RULE_NAME = sdf_rule_1 + RATING_GROUP = 5 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 2 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 1 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 5 + DL_MBR_MTR_PROFILE_IDX = 5 + ;List of SDF filter indices + SDF_FILTER_IDX = 1 + + [PCC_FILTER_3] + RULE_NAME = sdf_rule_2 + RATING_GROUP = 1 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 3 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 18 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 6 + DL_MBR_MTR_PROFILE_IDX = 6 + ;List of SDF filter indices + SDF_FILTER_IDX = 2 + + [PCC_FILTER_4] + RULE_NAME = adc_rule_1 + RATING_GROUP = Zero-Rate + SERVICE_ID = Internet + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 8 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + REDIRECT_INFO = 0 + SPONSOR_ID = Example + PRECEDENCE = 15 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 1 + + [PCC_FILTER_5] + RULE_NAME = adc_rule_2 + RATING_GROUP = 0 + SERVICE_ID = CIPA + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 9 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 4 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 0 + DL_MBR_MTR_PROFILE_IDX = 0 + ;List of SDF filter indices + ADC_FILTER_IDX = 2 + + [PCC_FILTER_6] + RULE_NAME = sdf_rule_3 + RATING_GROUP = 7 + SERVICE_ID = 0 + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 4 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = 0 + REDIRECT_INFO = 0 + PRECEDENCE = 17 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 5 + DL_MBR_MTR_PROFILE_IDX = 5 + ;List of SDF filter indices + SDF_FILTER_IDX = 3 + + [PCC_FILTER_7] + RULE_NAME = adc_rule_3 + RATING_GROUP = Zero-Rate + SERVICE_ID = Internet + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 5 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 210 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 4 + + [PCC_FILTER_8] + RULE_NAME = adc_rule_4 + RATING_GROUP = Zero-Rate + SERVICE_ID = Management + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 6 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 200 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 12 + + [PCC_FILTER_9] + RULE_NAME = adc_rule_5 + RATING_GROUP = Zero-Rate + SERVICE_ID = Provisioning + RULE_STATUS = 0 + GATE_STATUS = 1 + SESSION_CONT = 0 + REPORT_LEVEL = 7 + CHARGING_MODE = 0 + METERING_METHOD = 0 + MUTE_NOTIFY = 0 + MONITORING_KEY = 0 + SPONSOR_ID = Example + REDIRECT_INFO = 0 + PRECEDENCE = 220 + DROP_PKT_COUNT = 0 + UL_MBR_MTR_PROFILE_IDX = 7 + DL_MBR_MTR_PROFILE_IDX = 7 + ;List of SDF filter indices + ADC_FILTER_IDX = 3 + sdf_rules.cfg: | + [GLOBAL] + NUM_SDF_FILTERS = 4 + + [SDF_FILTER_1] + DIRECTION = downlink_only + IPV4_REMOTE = 13.2.1.113 + IPV4_REMOTE_MASK = 255.255.255.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 0 + LOCAL_HIGH_LIMIT_PORT = 65535 + REMOTE_LOW_LIMIT_PORT = 0 + REMOTE_HIGH_LIMIT_PORT = 65535 + + [SDF_FILTER_2] + DIRECTION = uplink_only + IPV4_LOCAL = 16.255.255.0 + IPV4_LOCAL_MASK = 255.255.255.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 0 + LOCAL_HIGH_LIMIT_PORT = 65535 + REMOTE_LOW_LIMIT_PORT = 0 + REMOTE_HIGH_LIMIT_PORT = 65535 + + [SDF_FILTER_3] + DIRECTION = downlink_only + IPV4_REMOTE = 130.10.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + REMOTE_LOW_LIMIT_PORT = 5060 + REMOTE_HIGH_LIMIT_PORT = 5060 + + [SDF_FILTER_4] + DIRECTION = uplink_only + IPV4_REMOTE = 103.1.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 17000 + LOCAL_HIGH_LIMIT_PORT = 17010 diff --git a/helm-charts/mcord/mcord-data-plane/templates/dp.yaml b/helm-charts/mcord/mcord-data-plane/templates/dp.yaml new file mode 100644 index 0000000..4038394 --- /dev/null +++ b/helm-charts/mcord/mcord-data-plane/templates/dp.yaml @@ -0,0 +1,155 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +--- +apiVersion: v1 +kind: Service +metadata: + name: ngic-dp +spec: + selector: + app: ngic-dp + clusterIP: None + ports: + - name: sx + port: {{ .Values.ngic_dp.ports.sx }} + protocol: UDP +--- +apiVersion: v1 +kind: Service +metadata: + name: ngic-dp-external +spec: + selector: + app: ngic-dp + type: NodePort + ports: + - port: {{ .Values.ngic_dp.ports.sx }} + nodePort: {{ .Values.ngic_dp.ports.sx_external }} + protocol: UDP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ngic-dp + labels: + app: ngic-dp +spec: + replicas: {{ .Values.ngic_dp.replicas }} + + selector: + matchLabels: + app: ngic-dp + serviceName: "ngic-dp" + template: + metadata: + labels: + app: ngic-dp + annotations: + k8s.v1.cni.cncf.io/networks: '[ + { "name": "s1u-net", "interface": "s1u-net", "namespace": "default" }, + { "name": "sgi-net", "interface": "sgi-net", "namespace": "default" } + ]' + spec: + nodeSelector: + kubernetes.io/hostname: "node3" + initContainers: + - name: init-iptables + image: {{ .Values.ngic_dp.images.init }} + command: [ "sh", "-c"] + securityContext: + capabilities: + add: + - NET_ADMIN + args: + - iptables -I OUTPUT -p icmp --icmp-type destination-unreachable -j DROP; + terminationGracePeriodSeconds: 1 + containers: + - name: ngic + image: {{ .Values.ngic_dp.images.dp }} + imagePullPolicy: IfNotPresent + stdin: true + tty: true + env: + - name: RTR_SGI_IP + value: {{ .Values.ngic_dp.config.rtr_sgi_ip }} + - name: SGI_MASK + value: {{ .Values.ngic_dp.config.sgi_mask }} + - name: MEM_LIMIT + valueFrom: + resourceFieldRef: + containerName: ngic + resource: limits.memory + divisor: 1Mi + command: [ "bash", "-xc"] + args: + - ip addr show; + ifconfig; + . /opt/ngic/config/dp_config.cfg; + ./ngic_dataplane $EAL_ARGS -- $APP_ARGS + volumeMounts: + - name: config-volume + mountPath: /opt/ngic/config + {{- if .Values.ngic_dp.config.hugepage_enabled}} + - name: hugepage + mountPath: /dev/hugepages + {{- end}} + - name: shared-data + mountPath: /opt/ngic/config/shared + {{- if .Values.ngic_dp.config.dpdk_enabled}} + - name: sriov-volume + mountPath: /sriov-cni + - name: vfio-volume + mountPath: /dev/vfio + {{- end}} + resources: + limits: + {{- if .Values.ngic_dp.config.hugepage_enabled}} + hugepages-1Gi: {{ .Values.ngic_dp.resources.hugepage }} + {{- end}} + cpu: {{ .Values.ngic_dp.resources.cpu }} + memory: {{ .Values.ngic_dp.resources.mem }} + intel.com/sriov: '2' + securityContext: + {{- if .Values.ngic_dp.config.dpdk_enabled}} + privileged: true + {{- else}} + capabilities: + add: + - NET_ADMIN + - IPC_LOCK + {{- end}} + volumes: + - name: config-volume + configMap: + name: ngicdp-config + {{- if .Values.ngic_dp.config.hugepage_enabled}} + - name: hugepage + emptyDir: + medium: HugePages + {{- end}} + - name: shared-data + emptyDir: {} + {{- if .Values.ngic_dp.config.dpdk_enabled}} + - name: sriov-volume + hostPath: + path: /var/lib/cni/sriov + type: Directory + - name: vfio-volume + hostPath: + path: /dev/vfio + type: Directory + {{- end}} diff --git a/helm-charts/mcord/mcord-data-plane/values.yaml b/helm-charts/mcord/mcord-data-plane/values.yaml new file mode 100644 index 0000000..9403f17 --- /dev/null +++ b/helm-charts/mcord/mcord-data-plane/values.yaml @@ -0,0 +1,46 @@ +--- +# Copyright 2018-present Open Networking Foundation +# Copyright 2018 Intel Corporation +# +# 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. + +# Default values for mcord-vepc-helm. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +redis_hostname: "redis" +accelleran_hostname: "accelleran" +mme_hostname: "mme" +# CP is on REMOTE node2 +controlplane_hostname: "10.90.0.152" +controlplane_port: 31311 + +ngic_dp: + images: + init: "node1:30500/ngick8stesting/c3po-mmeinit" + dp: "node1:30500/ngick8stesting/ngic-dp:690f418" + ports: + sx: 20 + sx_external: 31310 + replicas: 1 + resources: + cpu: 8 + mem: "8Gi" + hugepage: "8Gi" + config: + rtr_sgi_ip: "13.1.1.254" + sgi_mask: "255.255.255.0" + dpdk_enabled: false + hugepage_enabled: false + +namespace: epc diff --git a/helm-charts/mininet/.helmignore b/helm-charts/mininet/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/mininet/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/mininet/Chart.yaml b/helm-charts/mininet/Chart.yaml new file mode 100644 index 0000000..39568c7 --- /dev/null +++ b/helm-charts/mininet/Chart.yaml @@ -0,0 +1,20 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for Mininet +name: mininet +version: 0.3.0 diff --git a/helm-charts/mininet/templates/_helpers.tpl b/helm-charts/mininet/templates/_helpers.tpl new file mode 100644 index 0000000..31212af --- /dev/null +++ b/helm-charts/mininet/templates/_helpers.tpl @@ -0,0 +1,48 @@ +{{- /* + Copyright 2017-present Open Networking Foundation + + 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. + */ -}} + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "mininet.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 "mininet.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mininet.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/mininet/templates/configmap.yaml b/helm-charts/mininet/templates/configmap.yaml new file mode 100644 index 0000000..7a2c1b6 --- /dev/null +++ b/helm-charts/mininet/templates/configmap.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-configmap +data: +{{ (tpl (.Files.Glob "toposcripts/*").AsConfig .) | indent 2 }} diff --git a/helm-charts/mininet/templates/deployment.yaml b/helm-charts/mininet/templates/deployment.yaml new file mode 100644 index 0000000..f75041e --- /dev/null +++ b/helm-charts/mininet/templates/deployment.yaml @@ -0,0 +1,71 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "mininet.fullname" . }} + labels: + app: {{ template "mininet.name" . }} + chart: {{ template "mininet.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "mininet.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "mininet.name" . }} + release: {{ .Release.Name }} + {{- with .Values.annotations }} + annotations: +{{ toYaml . | indent 8 }} + {{- end }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + args: ["/toposcripts/topo.py"] + stdin: true + tty: true + securityContext: + privileged: true + volumeMounts: + - name: "topo-config" + mountPath: "/toposcripts" + resources: +{{ toYaml .Values.resources | indent 12 }} + volumes: + - name: "topo-config" + configMap: + name: "{{ .Release.Name }}-configmap" + defaultMode: 0755 + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/mininet/toposcripts/topo.py b/helm-charts/mininet/toposcripts/topo.py new file mode 100644 index 0000000..0c9c7cf --- /dev/null +++ b/helm-charts/mininet/toposcripts/topo.py @@ -0,0 +1,64 @@ +#!/usr/bin/python + +# Copyright 2017-present Open Networking Foundation +# +# 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. + +import re +import sys +import socket + +from mininet.cli import CLI +from mininet.log import setLogLevel, info, error +from mininet.net import Mininet +from mininet.link import Intf +from mininet.topo import SingleSwitchTopo +from mininet.node import OVSSwitch, RemoteController +from functools import partial +from mininet.util import quietRun + +if __name__ == '__main__': + setLogLevel( 'info' ) + + info( '*** Installing required software' ) + print quietRun( 'apt-get update' ) + print quietRun( 'apt-get -y install dnsmasq ethtool' ) + + info( '*** Creating network\n' ) + print quietRun( 'ovs-vsctl set Open_vSwitch . other_config:vlan-limit={{ .Values.vlanMatchDepth }}' ) + OVSSwitch13 = partial( OVSSwitch, protocols='OpenFlow13' ) + controllerIp = socket.gethostbyname( '{{ .Values.onosOpenflowSvc }}' ) + net = Mininet( topo=SingleSwitchTopo(1), + controller=lambda name: RemoteController( name, ip=controllerIp, port=6653 ), + switch=OVSSwitch13 + ) + + switch = net.switches[ 0 ] + info( '*** Adding hardware interface eth1 to switch', switch.name, '\n' ) + _intf = Intf( 'eth1', node=switch ) + + info( '*** Turning off checksum offloading for eth1\n' ) + print quietRun( 'ethtool -K eth1 tx off rx off' ) + + bgphost = net.hosts [ 0 ] + info( '*** Adding VLAN interface to host\n') + bgphost.cmd( 'ip link add link h1-eth0 name h1-eth0.222 type vlan proto 802.1Q id 222' ) + bgphost.cmd( 'ip link add link h1-eth0.222 name h1-eth0.222.111 type vlan proto 802.1Q id 111' ) + bgphost.cmd( 'ifconfig h1-eth0.222 up' ) + bgphost.cmd( 'ifconfig h1-eth0.222.111 up' ) + bgphost.cmd( 'ifconfig h1-eth0.222.111 172.18.0.10/24' ) + bgphost.cmd( 'dnsmasq --dhcp-range=172.18.0.50,172.18.0.150,12h' ) + + net.start() + CLI( net ) + net.stop() diff --git a/helm-charts/mininet/values.yaml b/helm-charts/mininet/values.yaml new file mode 100644 index 0000000..3670bef --- /dev/null +++ b/helm-charts/mininet/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# Put Mininet topology scripts in the toposcripts directory. +# They will be mounted inside the container in /toposcripts + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: ciena/mininet + tag: ubuntu-bionic + pullPolicy: IfNotPresent + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - olt + topologyKey: kubernetes.io/hostname + +annotations: + cni: "calico,pon1" + +onosOpenflowSvc: "onos-openflow.default.svc.cluster.local" +vlanMatchDepth: 2 diff --git a/helm-charts/nem-monitoring/.helmignore b/helm-charts/nem-monitoring/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/nem-monitoring/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/nem-monitoring/Chart.yaml b/helm-charts/nem-monitoring/Chart.yaml new file mode 100644 index 0000000..a47b15f --- /dev/null +++ b/helm-charts/nem-monitoring/Chart.yaml @@ -0,0 +1,18 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: nem-monitoring +description: Time Series Storage and Dashboard for SEBA +version: 1.0.1 diff --git a/helm-charts/nem-monitoring/README.md b/helm-charts/nem-monitoring/README.md new file mode 100644 index 0000000..d15253b --- /dev/null +++ b/helm-charts/nem-monitoring/README.md @@ -0,0 +1,20 @@ +# Nem Monitoring + +To deploy this chart please use: + +```shell +helm install -n nem-monitoring nem-monitoring/ +``` + +It will expose: + +- grafana on port `31300` +- prometheus on port `31301` + +## Running on minikube + +On minikube you don't need all the permission schema, so install this chart with: + +```shell +helm install -n nem-monitoring nem-monitoring/ -f nem-monitoring/examples/nem-monitoring-minikube.yaml +``` \ No newline at end of file diff --git a/helm-charts/nem-monitoring/examples/nem-monitoring-minikube.yaml b/helm-charts/nem-monitoring/examples/nem-monitoring-minikube.yaml new file mode 100644 index 0000000..a8aa763 --- /dev/null +++ b/helm-charts/nem-monitoring/examples/nem-monitoring-minikube.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +prometheus: + rbac: + create: false +grafana: + rbac: + create: false + serviceAccount: + create: false \ No newline at end of file diff --git a/helm-charts/nem-monitoring/grafana-dashboards/kb8s-app-metrics.json b/helm-charts/nem-monitoring/grafana-dashboards/kb8s-app-metrics.json new file mode 100644 index 0000000..9b5d28f --- /dev/null +++ b/helm-charts/nem-monitoring/grafana-dashboards/kb8s-app-metrics.json @@ -0,0 +1,1400 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "4.1.1" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + } + ], + "annotations": { + "list": [] + }, + "editable": true, + "gnetId": 1471, + "graphTooltip": 1, + "hideControls": false, + "id": null, + "links": [], + "refresh": "30s", + "rows": [ + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(http_requests_total{app=\"$container\", handler!=\"prometheus\", kubernetes_namespace=\"$namespace\"}[30s])) by (kubernetes_namespace,app,code)", + "interval": "", + "intervalFactor": 1, + "legendFormat": "native | {{code}}", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(irate(nginx_http_requests_total{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (kubernetes_namespace,app,status)", + "interval": "", + "intervalFactor": 1, + "legendFormat": "nginx | {{status}}", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(irate(haproxy_backend_http_responses_total{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace,code)", + "interval": "", + "intervalFactor": 1, + "legendFormat": "haproxy | {{code}}", + "refId": "C", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Request rate", + "tooltip": { + "msResolution": true, + "shared": false, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "fill": 1, + "id": 15, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(haproxy_backend_http_responses_total{app=\"$container\", kubernetes_namespace=\"$namespace\",code=\"5xx\"}[30s])) by (app,kubernetes_namespace) / sum(irate(haproxy_backend_http_responses_total{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace)", + "interval": "", + "intervalFactor": 2, + "legendFormat": "haproxy", + "refId": "A", + "step": 20 + }, + { + "expr": "sum(irate(http_requests_total{app=\"$container\", handler!=\"prometheus\", kubernetes_namespace=\"$namespace\", code=~\"5[0-9]+\"}[30s])) by (kubernetes_namespace,app) / sum(irate(http_requests_total{app=\"$container\", handler!=\"prometheus\", kubernetes_namespace=\"$namespace\"}[30s])) by (kubernetes_namespace,app)", + "intervalFactor": 2, + "legendFormat": "native", + "refId": "B", + "step": 20 + }, + { + "expr": "sum(irate(nginx_http_requests_total{app=\"$container\", kubernetes_namespace=\"$namespace\", status=~\"5[0-9]+\"}[30s])) by (kubernetes_namespace,app) / sum(irate(nginx_http_requests_total{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (kubernetes_namespace,app)", + "intervalFactor": 2, + "legendFormat": "nginx", + "refId": "C", + "step": 20 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Error rate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Request rate", + "titleSize": "h6" + }, + { + "collapse": true, + "height": 224, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "id": 5, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "max", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace,le))", + "intervalFactor": 1, + "legendFormat": "native | 0.99", + "refId": "A", + "step": 1 + }, + { + "expr": "histogram_quantile(0.90, sum(rate(http_request_duration_seconds_bucket{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace,le))", + "intervalFactor": 1, + "legendFormat": "native | 0.90", + "refId": "B", + "step": 1 + }, + { + "expr": "histogram_quantile(0.5, sum(rate(http_request_duration_seconds_bucket{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace,le))", + "interval": "", + "intervalFactor": 1, + "legendFormat": "native | 0.50", + "refId": "C", + "step": 1 + }, + { + "expr": "histogram_quantile(0.99, sum(rate(nginx_http_request_duration_seconds_bucket{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace,le))", + "intervalFactor": 1, + "legendFormat": "nginx | 0.99", + "refId": "D", + "step": 1 + }, + { + "expr": "histogram_quantile(0.9, sum(rate(nginx_http_request_duration_seconds_bucket{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace,le))", + "intervalFactor": 1, + "legendFormat": "nginx | 0.90", + "refId": "E", + "step": 1 + }, + { + "expr": "histogram_quantile(0.5, sum(rate(nginx_http_request_duration_seconds_bucket{app=\"$container\", kubernetes_namespace=\"$namespace\"}[30s])) by (app,kubernetes_namespace,le))", + "intervalFactor": 1, + "legendFormat": "nginx | 0.50", + "refId": "F", + "step": 1 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Response time percentiles", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Response time", + "titleSize": "h6" + }, + { + "collapse": false, + "height": 250, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "count(count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (pod_name))", + "interval": "", + "intervalFactor": 1, + "legendFormat": "pods", + "refId": "A", + "step": 5 + }, + { + "expr": "count(count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (kubernetes_io_hostname))", + "interval": "", + "intervalFactor": 2, + "legendFormat": "hosts", + "refId": "B", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Number of pods", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Pod count", + "titleSize": "h6" + }, + { + "collapse": false, + "height": 250, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "id": 12, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "elasticsearch-logging-data-20170207a (logging) - system", + "color": "#BF1B00" + }, + { + "alias": "elasticsearch-logging-data-20170207a (logging) - user", + "color": "#508642" + } + ], + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_cpu_system_seconds_total{container_name=\"$container\", namespace=\"$namespace\"}[30s])) by (namespace,container_name) / sum(container_spec_cpu_shares{container_name=\"$container\", namespace=\"$namespace\"} / 1024) by (namespace,container_name)", + "intervalFactor": 2, + "legendFormat": "system", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(irate(container_cpu_user_seconds_total{container_name=\"$container\", namespace=\"$namespace\"}[30s])) by (namespace,container_name) / sum(container_spec_cpu_shares{container_name=\"$container\", namespace=\"$namespace\"} / 1024) by (namespace,container_name)", + "interval": "", + "intervalFactor": 2, + "legendFormat": "user", + "refId": "B", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Cpu usage (relative to request)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "label": "", + "logBase": 1, + "max": "1", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Usage relative to request", + "titleSize": "h6" + }, + { + "collapse": true, + "height": 250, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "id": 10, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_cpu_usage_seconds_total{container_name=\"$container\", namespace=\"$namespace\"}[30s])) by (namespace,container_name) / sum(container_spec_cpu_quota{container_name=\"$container\", namespace=\"$namespace\"} / container_spec_cpu_period{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name)", + "interval": "", + "intervalFactor": 1, + "legendFormat": "actual", + "metric": "", + "refId": "A", + "step": 1 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Cpu usage (relative to limit)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "label": "", + "logBase": 1, + "max": "1", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "id": 11, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) / sum(container_spec_memory_limit_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name)", + "interval": "", + "intervalFactor": 1, + "legendFormat": "actual", + "refId": "A", + "step": 1 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory usage (relative to limit)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": "1", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Usage relative to limit", + "titleSize": "h6" + }, + { + "collapse": true, + "height": 250, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "fill": 1, + "id": 13, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_cpu_usage_seconds_total{container_name=\"$container\", namespace=\"$namespace\"}[30s])) by (id,pod_name)", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{pod_name}}", + "refId": "A", + "step": 2 + }, + { + "expr": "sum(container_spec_cpu_quota{container_name=\"$container\", namespace=\"$namespace\"} / container_spec_cpu_period{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) / count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) ", + "intervalFactor": 2, + "legendFormat": "limit", + "refId": "B", + "step": 2 + }, + { + "expr": "sum(container_spec_cpu_shares{container_name=\"$container\", namespace=\"$namespace\"} / 1024) by (namespace,container_name) / count(container_spec_cpu_shares{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) ", + "intervalFactor": 2, + "legendFormat": "request", + "refId": "C", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Cpu usage (per pod)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "cores", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "fill": 1, + "id": 14, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (id,pod_name)", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{pod_name}}", + "refId": "A", + "step": 2 + }, + { + "expr": "sum(container_spec_memory_limit_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) / count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (container_name,namespace)", + "intervalFactor": 2, + "legendFormat": "limit", + "refId": "B", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory usage (per pod)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Usage per pod", + "titleSize": "h6" + }, + { + "collapse": true, + "height": 250, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_cpu_usage_seconds_total{container_name=\"$container\", namespace=\"$namespace\"}[30s])) by (namespace,container_name) / count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) ", + "interval": "", + "intervalFactor": 1, + "legendFormat": "actual", + "refId": "A", + "step": 1 + }, + { + "expr": "sum(container_spec_cpu_quota{container_name=\"$container\", namespace=\"$namespace\"} / container_spec_cpu_period{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) / count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) ", + "interval": "", + "intervalFactor": 1, + "legendFormat": "limit", + "refId": "B", + "step": 1 + }, + { + "expr": "sum(container_spec_cpu_shares{container_name=\"$container\", namespace=\"$namespace\"} / 1024) by (namespace,container_name) / count(container_spec_cpu_shares{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) ", + "interval": "", + "intervalFactor": 1, + "legendFormat": "request", + "refId": "C", + "step": 1 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Cpu usage (avg per pod)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "label": "cores", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "id": 9, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) / count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) ", + "intervalFactor": 1, + "legendFormat": "actual", + "metric": "", + "refId": "A", + "step": 1 + }, + { + "expr": "sum(container_spec_memory_limit_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) / count(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name) ", + "interval": "", + "intervalFactor": 1, + "legendFormat": "limit", + "refId": "B", + "step": 1 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory usage (avg per pod)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Usage per pod (average)", + "titleSize": "h6" + }, + { + "collapse": true, + "height": 259.4375, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "id": 1, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_cpu_usage_seconds_total{container_name=\"$container\", namespace=\"$namespace\"}[30s])) by (namespace,container_name)", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "actual", + "metric": "", + "refId": "A", + "step": 1 + }, + { + "expr": "sum(container_spec_cpu_quota{container_name=\"$container\", namespace=\"$namespace\"} / container_spec_cpu_period{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name)", + "intervalFactor": 1, + "legendFormat": "limit", + "refId": "B", + "step": 1 + }, + { + "expr": "sum(container_spec_cpu_shares{container_name=\"$container\", namespace=\"$namespace\"} / 1024) by (namespace,container_name) ", + "intervalFactor": 1, + "legendFormat": "request", + "refId": "C", + "step": 1 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Cpu usage (total)", + "tooltip": { + "msResolution": true, + "shared": false, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "label": "cores", + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "id": 2, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_usage_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name)", + "interval": "", + "intervalFactor": 1, + "legendFormat": "actual", + "refId": "A", + "step": 1 + }, + { + "expr": "sum(container_spec_memory_limit_bytes{container_name=\"$container\", namespace=\"$namespace\"}) by (namespace,container_name)", + "intervalFactor": 1, + "legendFormat": "limit", + "refId": "B", + "step": 1 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory usage (total)", + "tooltip": { + "msResolution": true, + "shared": false, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Usage total", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": ".+", + "current": {}, + "datasource": "Prometheus", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "namespace", + "options": [], + "query": "label_values(container_memory_usage_bytes{namespace=~\".+\",container_name!=\"POD\"},namespace)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": null, + "tags": [], + "tagsQuery": null, + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "current": {}, + "datasource": "Prometheus", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "container", + "options": [], + "query": "label_values(container_memory_usage_bytes{namespace=~\"$namespace\",container_name!=\"POD\"},container_name)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": null, + "tags": [], + "tagsQuery": null, + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "Kubernetes App Metrics", + "version": 37, + "description": "After selecting your namespace and container you get a wealth of metrics like request rate, error rate, response times, pod count, cpu and memory usage. You can view cpu and memory usage in a variety of ways, compared to the limit, compared to the request, per pod, average per pod, etc." + } \ No newline at end of file diff --git a/helm-charts/nem-monitoring/grafana-dashboards/node-exporter.json b/helm-charts/nem-monitoring/grafana-dashboards/node-exporter.json new file mode 100644 index 0000000..1406430 --- /dev/null +++ b/helm-charts/nem-monitoring/grafana-dashboards/node-exporter.json @@ -0,0 +1,20937 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": 1860, + "graphTooltip": 0, + "id": null, + "iteration": 1550176331904, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 261, + "panels": [], + "repeat": null, + "title": "Basic CPU / Mem / Disk Gauge", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": null, + "description": "Busy state of all CPU cores together", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 20, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 2, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "(((count(count(node_cpu_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}) by (cpu))) - avg(sum by (mode)(irate(node_cpu_seconds_total{mode='idle',instance=~\"$node:$port\",job=~\"$job\"}[5m])))) * 100) / count(count(node_cpu_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}) by (cpu))", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A", + "step": 900 + } + ], + "thresholds": "85,95", + "title": "CPU Busy", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": 0, + "description": "Non available RAM memory", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 4, + "y": 1 + }, + "hideTimeOverride": false, + "id": 16, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "((node_memory_MemTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_MemFree_bytes{instance=~\"$node:$port\",job=~\"$job\"}) / (node_memory_MemTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} )) * 100", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "refId": "A", + "step": 900 + }, + { + "expr": "100 - ((node_memory_MemAvailable_bytes{instance=~\"$node:$port\",job=~\"$job\"} * 100) / node_memory_MemTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "B", + "step": 900 + } + ], + "thresholds": "80,90", + "title": "Used RAM Memory", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": null, + "description": "Used Swap", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 1 + }, + "id": 21, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "((node_memory_SwapTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_SwapFree_bytes{instance=~\"$node:$port\",job=~\"$job\"}) / (node_memory_SwapTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} )) * 100", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "10,25", + "title": "Used SWAP", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": null, + "description": "Used Root FS", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 12, + "y": 1 + }, + "id": 154, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "100 - ((node_filesystem_avail_bytes{instance=~\"$node:$port\",job=~\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"} * 100) / node_filesystem_size_bytes{instance=~\"$node:$port\",job=~\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "80,90", + "title": "Used Root FS", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": null, + "description": "Busy state of all CPU cores together (1 min average)", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 16, + "y": 1 + }, + "id": 19, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 2, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "avg(node_load1{instance=~\"$node:$port\",job=~\"$job\"}) / count(count(node_cpu_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}) by (cpu)) * 100", + "hide": false, + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "85, 95", + "title": "CPU System Load (1m avg)", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": null, + "description": "Busy state of all CPU cores together (5 min average)", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 20, + "y": 1 + }, + "id": 155, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 2, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": true + }, + "tableColumn": "", + "targets": [ + { + "expr": "avg(node_load5{instance=~\"$node:$port\",job=~\"$job\"}) / count(count(node_cpu_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}) by (cpu)) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "85, 95", + "title": "CPU System Load (5m avg)", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 262, + "panels": [], + "repeat": null, + "title": "Basic CPU / Mem / Disk Info", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": "Prometheus", + "description": "Total number of CPU cores", + "format": "short", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 0, + "y": 6 + }, + "id": 14, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "count(count(node_cpu_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}) by (cpu))", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "", + "title": "CPU Cores", + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": "Prometheus", + "decimals": 2, + "description": "Total RAM", + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 4, + "y": 6 + }, + "id": 75, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "70%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "node_memory_MemTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "", + "title": "Total RAM", + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": "Prometheus", + "decimals": 2, + "description": "Total SWAP", + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 8, + "y": 6 + }, + "id": 18, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "70%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "node_memory_SwapTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "", + "title": "Total SWAP", + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "Prometheus", + "decimals": null, + "description": "Total RootFS", + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 12, + "y": 6 + }, + "id": 23, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "node_filesystem_size_bytes{instance=~\"$node:$port\",job=~\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "70,90", + "title": "Total RootFS", + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": "Prometheus", + "decimals": 2, + "description": "System Load (1m avg)", + "format": "short", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 16, + "y": 6 + }, + "id": 17, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 2, + "nullPointMode": "null", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "node_load1{instance=~\"$node:$port\",job=~\"$job\"}", + "hide": false, + "intervalFactor": 1, + "refId": "A", + "step": 900 + } + ], + "thresholds": "", + "title": "System Load (1m avg)", + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": "Prometheus", + "decimals": 1, + "description": "System uptime", + "format": "s", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 6 + }, + "hideTimeOverride": true, + "id": 15, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "null", + "nullText": null, + "postfix": "s", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "node_time_seconds{instance=~\"$node:$port\",job=~\"$job\"} - node_boot_time_seconds{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "refId": "A", + "step": 1800 + } + ], + "thresholds": "", + "title": "Uptime", + "transparent": false, + "type": "singlestat", + "valueFontSize": "50%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 263, + "panels": [], + "repeat": null, + "title": "Basic CPU / Mem Graph", + "type": "row" + }, + { + "aliasColors": { + "Busy": "#EAB839", + "Busy Iowait": "#890F02", + "Busy other": "#1F78C1", + "Idle": "#052B51", + "Idle - Waiting for something to happen": "#052B51", + "guest": "#9AC48A", + "idle": "#052B51", + "iowait": "#EAB839", + "irq": "#BF1B00", + "nice": "#C15C17", + "softirq": "#E24D42", + "steal": "#FCE2DE", + "system": "#508642", + "user": "#5195CE" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "Basic CPU info", + "fill": 4, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 77, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": 250, + "sort": null, + "sortDesc": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": true, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Busy Iowait", + "color": "#890F02" + }, + { + "alias": "Idle", + "color": "#7EB26D" + }, + { + "alias": "Busy System", + "color": "#EAB839" + }, + { + "alias": "Busy User", + "color": "#0A437C" + }, + { + "alias": "Busy Other", + "color": "#6D1F62" + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode=\"system\",instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Busy System", + "refId": "B", + "step": 240 + }, + { + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode='user',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Busy User", + "refId": "D", + "step": 240 + }, + { + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode='iowait',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Busy Iowait", + "refId": "E", + "step": 240 + }, + { + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode=~\".*irq\",instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Busy IRQs", + "refId": "F", + "step": 240 + }, + { + "expr": "sum (rate(node_cpu_seconds_total{mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Busy Other", + "refId": "A", + "step": 240 + }, + { + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='idle',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Idle", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "CPU Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "", + "logBase": 1, + "max": "100", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "SWAP Used": "#BF1B00", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap Used": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "Basic memory usage", + "fill": 4, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 78, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "RAM Total", + "color": "#E0F9D7", + "fill": 0, + "stack": false + }, + { + "alias": "RAM Cache + Buffer", + "color": "#052B51" + }, + { + "alias": "RAM Free", + "color": "#7EB26D" + }, + { + "alias": "Avaliable", + "color": "#DEDAF7", + "fill": 0, + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_MemTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "RAM Total", + "refId": "A", + "step": 240 + }, + { + "expr": "node_memory_MemTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_MemFree_bytes{instance=~\"$node:$port\",job=~\"$job\"} - (node_memory_Cached_bytes{instance=~\"$node:$port\",job=~\"$job\"} + node_memory_Buffers_bytes{instance=~\"$node:$port\",job=~\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "RAM Used", + "refId": "D", + "step": 240 + }, + { + "expr": "node_memory_Cached_bytes{instance=~\"$node:$port\",job=~\"$job\"} + node_memory_Buffers_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RAM Cache + Buffer", + "refId": "B", + "step": 240 + }, + { + "expr": "node_memory_MemFree_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RAM Free", + "refId": "F", + "step": 240 + }, + { + "expr": "(node_memory_SwapTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_SwapFree_bytes{instance=~\"$node:$port\",job=~\"$job\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SWAP Used", + "refId": "G", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 264, + "panels": [], + "repeat": null, + "title": "Basic Net / Disk Info", + "type": "row" + }, + { + "aliasColors": { + "Recv_bytes_eth2": "#7EB26D", + "Recv_bytes_lo": "#0A50A1", + "Recv_drop_eth2": "#6ED0E0", + "Recv_drop_lo": "#E0F9D7", + "Recv_errs_eth2": "#BF1B00", + "Recv_errs_lo": "#CCA300", + "Trans_bytes_eth2": "#7EB26D", + "Trans_bytes_lo": "#0A50A1", + "Trans_drop_eth2": "#6ED0E0", + "Trans_drop_lo": "#E0F9D7", + "Trans_errs_eth2": "#BF1B00", + "Trans_errs_lo": "#CCA300", + "recv_bytes_lo": "#0A50A1", + "recv_drop_eth0": "#99440A", + "recv_drop_lo": "#967302", + "recv_errs_eth0": "#BF1B00", + "recv_errs_lo": "#890F02", + "trans_bytes_eth0": "#7EB26D", + "trans_bytes_lo": "#0A50A1", + "trans_drop_eth0": "#99440A", + "trans_drop_lo": "#967302", + "trans_errs_eth0": "#BF1B00", + "trans_errs_lo": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Basic network info per interface", + "fill": 4, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 74, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(node_network_receive_bytes_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "recv {{device}}", + "refId": "A", + "step": 240 + }, + { + "expr": "rate(node_network_transmit_bytes_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "trans {{device}} ", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "pps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "Disk space used of all filesystems mounted", + "fill": 4, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 18 + }, + "height": "", + "id": 152, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "100 - ((node_filesystem_avail_bytes{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{mountpoint}}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk Space Used Basic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": "100", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 265, + "panels": [ + { + "aliasColors": { + "Idle - Waiting for something to happen": "#052B51", + "guest": "#9AC48A", + "idle": "#052B51", + "iowait": "#EAB839", + "irq": "#BF1B00", + "nice": "#C15C17", + "softirq": "#E24D42", + "steal": "#FCE2DE", + "system": "#508642", + "user": "#5195CE" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "", + "fill": 4, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 250, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": true, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode=\"system\",instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "interval": "10s", + "intervalFactor": 2, + "legendFormat": "System - Processes executing in kernel mode", + "refId": "A", + "step": 20 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='user',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "User - Normal processes executing in user mode", + "refId": "B", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='nice',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Nice - Niced processes executing in user mode", + "refId": "C", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='idle',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Idle - Waiting for something to happen", + "refId": "F", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='iowait',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Iowait - Waiting for I/O to complete", + "refId": "D", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='irq',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Irq - Servicing interrupts", + "refId": "G", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='softirq',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Softirq - Servicing softirqs", + "refId": "H", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='steal',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Steal - Time spent in other operating systems when running in a virtualized environment", + "refId": "E", + "step": 240 + }, + { + "expr": "sum by (mode)(irate(node_cpu_seconds_total{mode='guest',instance=~\"$node:$port\",job=~\"$job\"}[5m])) * 100", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Guest - Time spent running a virtual CPU for a guest operating system", + "refId": "I", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "CPU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Percentage", + "logBase": 1, + "max": "100", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap - Swap memory usage": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839", + "Unused - Free memory unasigned": "#052B51" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "description": "", + "fill": 4, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 26 + }, + "id": 24, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Harware Corrupted - *./", + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_MemTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_MemFree_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_Buffers_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_Cached_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_Slab_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_PageTables_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_SwapCached_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Apps - Memory used by user-space applications", + "refId": "Q", + "step": 240 + }, + { + "expr": "node_memory_PageTables_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "PageTables - Memory used to map between virtual and physical memory addresses", + "refId": "G", + "step": 240 + }, + { + "expr": "node_memory_SwapCached_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SwapCache - Memory that keeps track of pages that have been fetched from swap but not yet been modified", + "refId": "F", + "step": 240 + }, + { + "expr": "node_memory_Slab_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Slab - Memory used by the kernel to cache data structures for its own use (caches like inode, dentry, etc)", + "refId": "E", + "step": 240 + }, + { + "expr": "node_memory_Cached_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Cache - Parked file data (file content) cache", + "refId": "C", + "step": 240 + }, + { + "expr": "node_memory_Buffers_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Buffers - Block device (e.g. harddisk) cache", + "refId": "B", + "step": 240 + }, + { + "expr": "node_memory_MemFree_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Unused - Free memory unasigned", + "refId": "D", + "step": 240 + }, + { + "expr": "(node_memory_SwapTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"} - node_memory_SwapFree_bytes{instance=~\"$node:$port\",job=~\"$job\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Swap - Swap space used", + "refId": "I", + "step": 240 + }, + { + "expr": "node_memory_HardwareCorrupted_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working", + "refId": "O", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Stack", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "receive_packets_eth0": "#7EB26D", + "receive_packets_lo": "#E24D42", + "transmit_packets_eth0": "#7EB26D", + "transmit_packets_lo": "#E24D42" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 4, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 84, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_bytes_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive", + "refId": "O", + "step": 240 + }, + { + "expr": "irate(node_network_transmit_bytes_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit", + "refId": "P", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": "Bytes out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 4, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 38 + }, + "height": "", + "id": 156, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": false, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_size_bytes{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'} - node_filesystem_avail_bytes{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{mountpoint}}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk Space Used", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 50 + }, + "id": 229, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_reads_completed_total{instance=~\"$node:$port\",job=~\"$job\",device=~\"[a-z]*[a-z]\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - Reads completed", + "refId": "A", + "step": 480 + }, + { + "expr": "irate(node_disk_writes_completed_total{instance=~\"$node:$port\",job=~\"$job\",device=~\"[a-z]*[a-z]\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Writes completed", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk IOps", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "IO read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "io time": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 4, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 50 + }, + "id": 42, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*read*./", + "transform": "negative-Y" + }, + { + "alias": "/.*sda.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde.*/", + "color": "#E24D42" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_read_bytes_total{instance=~\"$node:$port\",job=~\"$job\",device=~\"[a-z]*[a-z]\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Successfully read bytes", + "refId": "A", + "step": 240 + }, + { + "expr": "irate(node_disk_written_bytes_total{instance=~\"$node:$port\",job=~\"$job\",device=~\"[a-z]*[a-z]\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Successfully written bytes", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "I/O Usage Read / Write", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": false, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "ms", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { + "io time": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 4, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 62 + }, + "id": 127, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": null, + "sortDesc": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_time_seconds_total{instance=~\"$node:$port\",job=~\"$job\",device=~\"[a-z]*[a-z]\"} [5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Milliseconds spent doing I/Os", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "I/O Usage Times", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": false, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": "Milliseconds", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "ms", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "CPU Memory Net Disk", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 266, + "panels": [ + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 63 + }, + "id": 136, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Inactive_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Inactive - Memory which has been less recently used. It is more eligible to be reclaimed for other purposes", + "refId": "K", + "step": 4 + }, + { + "expr": "node_memory_Active_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Active - Memory that has been used more recently and usually not reclaimed unless absolutely necessary", + "refId": "J", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Active / Inactive", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 63 + }, + "id": 135, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Committed_AS - *./" + }, + { + "alias": "/.*CommitLimit - *./", + "color": "#BF1B00", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Committed_AS_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Committed_AS - Amount of memory presently allocated on the system", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_CommitLimit_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "CommitLimit - Amount of memory currently available to be allocated on the system", + "refId": "M", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Commited", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 73 + }, + "id": 191, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Inactive_file_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Inactive_file - File-backed memory on inactive LRU list", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Inactive_anon_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Inactive_anon - Anonymous and swap cache on inactive LRU list, including tmpfs (shmem)", + "refId": "D", + "step": 4 + }, + { + "expr": "node_memory_Active_file_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Active_file - File-backed memory on active LRU list", + "refId": "B", + "step": 4 + }, + { + "expr": "node_memory_Active_anon_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Active_anon - Anonymous and swap cache on active least-recently-used (LRU) list, including tmpfs", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Active / Inactive Detail", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 73 + }, + "id": 130, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Writeback_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Writeback - Memory which is actively being written back to disk", + "refId": "J", + "step": 4 + }, + { + "expr": "node_memory_WritebackTmp_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "WritebackTmp - Memory used by FUSE for temporary writeback buffers", + "refId": "K", + "step": 4 + }, + { + "expr": "node_memory_Dirty_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Dirty - Memory which is waiting to get written back to the disk", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Writeback and Dirty", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 83 + }, + "id": 138, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Mapped_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Mapped - Used memory in mapped pages files which have been mmaped, such as libraries", + "refId": "A", + "step": 4 + }, + { + "expr": "node_memory_Shmem_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Shmem - Used shared memory (shared between several processes, thus including RAM disks)", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Shared and Mapped", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 83 + }, + "id": 131, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_SUnreclaim_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SUnreclaim - Part of Slab, that cannot be reclaimed on memory pressure", + "refId": "O", + "step": 4 + }, + { + "expr": "node_memory_SReclaimable_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SReclaimable - Part of Slab, that might be reclaimed, such as caches", + "refId": "N", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Slab", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 93 + }, + "id": 70, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_VmallocChunk_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "VmallocChunk - Largest contigious block of vmalloc area which is free", + "refId": "H", + "step": 4 + }, + { + "expr": "node_memory_VmallocTotal_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "VmallocTotal - Total size of vmalloc memory area", + "refId": "I", + "step": 4 + }, + { + "expr": "node_memory_VmallocUsed_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "VmallocUsed - Amount of vmalloc area which is used", + "refId": "O", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Vmalloc", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 93 + }, + "id": 159, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Bounce_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Bounce - Memory used for block device bounce buffers", + "refId": "N", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Bounce", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 103 + }, + "id": 129, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Inactive *./", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_AnonHugePages_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "AnonHugePages - Memory in anonymous huge pages", + "refId": "D", + "step": 4 + }, + { + "expr": "node_memory_AnonPages_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "AnonPages - Memory in user pages not backed by files", + "refId": "G", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Anonymous", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 103 + }, + "id": 160, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_KernelStack_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "KernelStack - Kernel memory stack. This is not reclaimable", + "refId": "N", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Kernel", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#806EB7", + "Total RAM + Swap": "#806EB7", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 113 + }, + "id": 140, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_HugePages_Free{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages_Free - Huge pages in the pool that are not yet allocated", + "refId": "I", + "step": 4 + }, + { + "expr": "node_memory_HugePages_Rsvd{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages_Rsvd - Huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made", + "refId": "J", + "step": 4 + }, + { + "expr": "node_memory_HugePages_Surp{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages_Surp - Huge pages in the pool above the value in /proc/sys/vm/nr_hugepages", + "refId": "K", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory HugePages Counter", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#806EB7", + "Total RAM + Swap": "#806EB7", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 113 + }, + "id": 71, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_HugePages_Total{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "HugePages - Total size of the pool of huge pages", + "refId": "L", + "step": 4 + }, + { + "expr": "node_memory_Hugepagesize_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Hugepagesize - Huge Page size", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory HugePages Size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 123 + }, + "id": 128, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_DirectMap1G{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "DirectMap1G - Amount of pages mapped as this size", + "refId": "J", + "step": 4 + }, + { + "expr": "node_memory_DirectMap2M_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "DirectMap2M - Amount of pages mapped as this size", + "refId": "K", + "step": 4 + }, + { + "expr": "node_memory_DirectMap4k_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "DirectMap4K - Amount of pages mapped as this size", + "refId": "L", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory DirectMap", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 123 + }, + "id": 137, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_Unevictable_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable - Amount of unevictable memory that can't be swapped out for a variety of reasons", + "refId": "P", + "step": 4 + }, + { + "expr": "node_memory_Mlocked_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "MLocked - Size of pages locked to memory using the mlock() system call", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Unevictable and MLocked", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 133 + }, + "id": 132, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_memory_NFS_Unstable_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NFS Unstable - Memory in NFS pages sent to the server, but not yet commited to the storage", + "refId": "L", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory NFS", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Memory Detail Meminfo", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 267, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 134 + }, + "id": 176, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*out/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgpgin{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pagesin - Page in operations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgpgout{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pagesout - Page out operations", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Pages In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 134 + }, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*out/", + "transform": "negative-Y" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pswpin{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pswpin - Pages swapped in", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pswpout{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pswpout - Pages swapped out", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Pages Swap In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 144 + }, + "id": 197, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgdeactivate{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgdeactivate - Pages moved from active to inactive", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgfree{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgfree - Page free operations", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgactivate{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgactivate - Pages moved from inactive to active", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Operations", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 144 + }, + "id": 175, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Pgfault - Page major and minor fault operations", + "fill": 0, + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgfault{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgfault - Page major and minor fault operations", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgmajfault{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgmajfault - Major page fault operations", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgfault{instance=~\"$node:$port\",job=~\"$job\"}[5m]) - irate(node_vmstat_pgmajfault{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgminfault - Minor page fault operations", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Faults", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Faults", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 154 + }, + "id": 172, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_kswapd_inodesteal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Kswapd_inodesteal - Pages reclaimed via kswapd inode freeing", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pginodesteal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgindesteal - Pages reclaimed via inode freeing", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Pages Reclaimed", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 154 + }, + "id": 184, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pageoutrun{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pageoutrun - Kswapd calls to page reclaim", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_allocstall{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "Allocstall - Direct reclaim calls", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_zone_reclaim_failed{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "Zone_reclaim_failed - Zone reclaim failures", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Calls Reclaimed", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Calls", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 164 + }, + "id": 200, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgrotated{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgrotated - Pages rotated to tail of the LRU", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Rotate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 164 + }, + "id": 170, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_drop_pagecache{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Drop_pagecache - Calls to drop page cache pages", + "refId": "N", + "step": 4 + }, + { + "expr": "node_vmstat_drop_slab{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Drop_slab - Calls to drop slab cache pages", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Drop", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Calls", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 174 + }, + "id": 183, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_slabs_scanned{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Slabs_scanned - Slab pages scanned", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Scan Slab", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 174 + }, + "id": 181, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_unevictable_pgs_cleared{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable_pgs_cleared - Unevictable pages cleared", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_unevictable_pgs_culled{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable_pgs_culled - Unevictable pages culled", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_unevictable_pgs_mlocked{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable_pgs_mlocked - Unevictable pages mlocked", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_vmstat_unevictable_pgs_munlocked{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable_pgs_munlocked - Unevictable pages munlocked", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_vmstat_unevictable_pgs_rescued{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable_pgs_rescued- Unevictable pages rescued", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_vmstat_unevictable_pgs_scanned{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable_pgs_scanned - Unevictable pages scanned", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_vmstat_unevictable_pgs_stranded{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "unevictable_pgs_stranded - Unevictable pages stranded", + "refId": "H", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Unevictable Pages", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 184 + }, + "id": 174, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgalloc_dma{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgalloc_dma - Dma mem page allocations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgalloc_dma32{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgalloc_dma32 - Dma32 mem page allocations", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgalloc_movable{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgalloc_movable - Movable mem page allocations", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgalloc_normal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgalloc_normal - Normal mem page allocations", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Allocation", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 184 + }, + "id": 177, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgrefill_dma{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgrefill_dma - Dma mem pages inspected in refill_inactive_zone", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgrefill_dma32{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgrefill_dma32 - Dma32 mem pages inspected in refill_inactive_zone", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgrefill_movable{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgrefill_movable - Movable mem pages inspected in refill_inactive_zone", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgrefill_normal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgrefill_normal - Normal mem pages inspected in refill_inactive_zone", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Refill", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 194 + }, + "id": 179, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgsteal_direct_dma{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_direct_dma - Dma mem pages stealed", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgsteal_direct_dma32{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_direct_dma32 - Dma32 mem pages scanned", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgsteal_direct_movable{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_direct_movable - Movable mem pages scanned", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgsteal_direct_normal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_direct_normal - Normal mem pages scanned", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Steal Direct", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 194 + }, + "id": 198, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgsteal_kswapd_dma{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_kswapd_dma - Dma mem pages scanned by kswapd", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgsteal_kswapd_dma32{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_kswapd_dma32 - Dma32 mem pages scanned by kswapd", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgsteal_kswapd_movable{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_kswapd_movable - Movable mem pages scanned by kswapd", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgsteal_kswapd_normal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgsteal_kswapd_normal - Normal mem pages scanned by kswapd", + "refId": "I", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Steal Kswapd", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 204 + }, + "id": 192, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgscan_direct_dma{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_direct_dma - Dma mem pages scanned", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgscan_direct_dma32{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_direct_dma32 - Dma32 mem pages scanned", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgscan_direct_movable{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_direct_movable - Movable mem pages scanned", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgscan_direct_normal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_direct_normal - Normal mem pages scanned", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgscan_direct_throttle{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "Pgscan_direct_throttle - ", + "refId": "F", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Scan Direct", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 204 + }, + "id": 178, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_pgscan_kswapd_dma{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_kswapd_dma - Dma mem pages scanned by kswapd", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgscan_kswapd_dma32{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_kswapd_dma32 - Dma32 mem pages scanned by kswapd", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgscan_kswapd_movable{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_kswapd_movable - Movable mem pages scanned by kswapd", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgscan_kswapd_normal{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgscan_kswapd_normal - Normal mem pages scanned by kswapd", + "refId": "I", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Scan Kswapd", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 214 + }, + "id": 169, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*fail*./", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_compact_free_scanned{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Compact_free_scanned - Pages scanned for freeing by compaction daemon", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_compact_isolated{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Compact_isolated - Page isolations for memory compaction", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_compact_migrate_scanned{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Compact_migrate_scanned - Pages scanned for migration by compaction daemon", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Compact", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Active": "#99440A", + "Buffers": "#58140C", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Dirty": "#6ED0E0", + "Free": "#B7DBAB", + "Inactive": "#EA6460", + "Mapped": "#052B51", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "Slab_Cache": "#EAB839", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Total": "#511749", + "Total RAM": "#052B51", + "Total RAM + Swap": "#052B51", + "Total Swap": "#614D93", + "VmallocUsed": "#EA6460" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 214 + }, + "id": 189, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*fail*./", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_compact_fail{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Compact_fail - Unsuccessful compactions for high order allocations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_compact_stall{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Compact_stall - Failures to even start compacting", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_vmstat_compact_success{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Compact_sucess - Successful compactions for high order allocations", + "refId": "F", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Compactions", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Compactions", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 224 + }, + "id": 190, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_kswapd_high_wmark_hit_quickly{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Kswapd_high_wmark_hit_quickly - Times high watermark reached quickly", + "refId": "N", + "step": 4 + }, + { + "expr": "node_vmstat_kswapd_low_wmark_hit_quickly{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Kswapd_low_wmark_hit_quickly - Times low watermark reached quickly", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Kswapd Watermark", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 224 + }, + "id": 171, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_htlb_buddy_alloc_fail{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Htlb_buddy_alloc_fail - Huge TLB page buddy allocation failures", + "refId": "N", + "step": 4 + }, + { + "expr": "node_vmstat_htlb_buddy_alloc_success{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Htlb_buddy_alloc_success - Huge TLB page buddy allocation successes", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Buddy Alloc", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Allocations", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 234 + }, + "id": 173, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_numa_foreign{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_foreign - Foreign NUMA zone allocations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_numa_hit{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_hit - Successful allocations from preferred NUMA zone", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_vmstat_numa_interleave{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_interleave - Interleaved NUMA allocations in each zone for each NUMA node", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_vmstat_numa_local{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_local - Successful allocations from local NUMA zone", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_vmstat_numa_miss{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_miss - Unsuccessful allocations from preferred NUMA zona", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_vmstat_numa_other{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_other - Unsuccessful allocations from local NUMA zone", + "refId": "I", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Numa Allocations", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Allocations", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 234 + }, + "id": 193, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Numa_pages_migrated - *./", + "fill": 0, + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_numa_pages_migrated{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_pages_migrated - NUMA page migrations", + "refId": "J", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgmigrate_fail{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgmigrate_fail - Unsuccessful NUMA page migrations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_pgmigrate_success{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pgmigrate_success - Successful NUMA page migrations", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Numa Page Migrations", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 244 + }, + "id": 194, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_numa_hint_faults{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_hint_faults - NUMA hint faults trapped", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_numa_hint_faults_local{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_hint_faults_local - Hinting faults to local nodes", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Numa Hints", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "HInts", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 244 + }, + "id": 196, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_numa_pte_updates{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Numa_pte_updates - NUMA page table entry updates", + "refId": "K", + "step": 4 + }, + { + "expr": "irate(node_vmstat_numa_huge_pte_updates{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "Numa_huge_pte_updates - NUMA huge page table entry updates", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Numa Table Updates", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Updates", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 254 + }, + "id": 199, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_thp_split{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Thp_split - Transparent huge page splits", + "refId": "F", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory THP Splits", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Splits", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 254 + }, + "id": 182, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_workingset_activate{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Workingset_activate - Page activations to form the working set", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_workingset_nodereclaim{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Workingset_nodereclaim - NUMA node working set page reclaims", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_vmstat_workingset_refault{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Workingset_refault - Refaults of previously evicted pages", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Workingset", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 264 + }, + "id": 180, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_vmstat_thp_collapse_alloc{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Thp_collapse_alloc - Transparent huge page collapse allocations", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_vmstat_thp_collapse_alloc_failed{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Thp_collapse_alloc_failed - Transparent huge page collapse allocation failures", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_vmstat_thp_zero_page_alloc{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Thp_zero_page_alloc - Transparent huge page zeroed page allocations", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_vmstat_thp_zero_page_alloc_failed{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Thp_zero_page_alloc_failed - Transparent huge page zeroed page allocation failures", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_vmstat_thp_fault_alloc{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "Thp_fault_alloc - Transparent huge page fault allocations", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_vmstat_thp_fault_fallback{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "Thp_fault_fallback - Transparent huge page fault fallbacks", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory THP Allocations", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Allocations", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Memory Detail Vmstat", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 268, + "panels": [ + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 265 + }, + "id": 185, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_active_anon{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Active_anon - Active anonymous memory pages", + "refId": "B", + "step": 240 + }, + { + "expr": "node_vmstat_nr_active_file{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Active_file - Active file memory memory pages", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Active", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 265 + }, + "id": 228, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_inactive_anon{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Inactive_anon - Inactive anonymous memory pages in each zone for each NUMA node", + "refId": "A", + "step": 240 + }, + { + "expr": "node_vmstat_nr_inactive_file{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Inactive_file - Inactive file memory pages in each zone for each NUMA node", + "refId": "D", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Inactive", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 275 + }, + "id": 188, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_slab_reclaimable{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Reclaimable - Instantaneous reclaimable slab pages", + "refId": "A", + "step": 240 + }, + { + "expr": "node_vmstat_nr_slab_unreclaimable{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unreclaimable - Instantaneous unreclaimable slab pages", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Reclaimed / Unreclaimed", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 275 + }, + "id": 186, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_free_pages{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Free_pages - Free pages", + "refId": "B", + "step": 240 + }, + { + "expr": "node_vmstat_nr_written{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Written - Pages written out in each zone for each NUMA node", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Free / Written", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 285 + }, + "id": 218, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_dirty{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Dirty - Pages in dirty state", + "refId": "C", + "step": 240 + }, + { + "expr": "node_vmstat_nr_bounce{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Bounce - Bounce buffer pages", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Dirty / Bounce", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 285 + }, + "id": 201, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_unevictable{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unevictable - Unevictable pages", + "refId": "B", + "step": 240 + }, + { + "expr": "node_vmstat_nr_mlock{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Mlock - Pages under mlock", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Pages Unevictable / Mlock", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 295 + }, + "id": 214, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_shmem{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Shmem - Shared memory pages", + "refId": "H", + "step": 240 + }, + { + "expr": "node_vmstat_nr_mapped{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Mapped - Mapped pagecache pages in each zone for each NUMA node", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Shmem / Mapped", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 295 + }, + "id": 212, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_kernel_stack{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Kernel_stack - Pages of kernel stack", + "refId": "F", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Kernel_stack", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 305 + }, + "id": 203, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_writeback{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Writeback - Writeback pages", + "refId": "G", + "step": 240 + }, + { + "expr": "node_vmstat_nr_writeback_temp{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Writeback_temp - Temporary writeback pages", + "refId": "H", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Pages Writeback", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 305 + }, + "id": 205, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_file_pages{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "File_pages - File pagecache pages in each zone for each NUMA node", + "refId": "F", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page File_pages", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 315 + }, + "id": 206, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_dirty_background_threshold{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Dirty_background_threshold - Background writeback threshold", + "refId": "D", + "step": 240 + }, + { + "expr": "node_vmstat_nr_dirty_threshold{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Dirty_threshold - Dirty throttling threshold", + "refId": "E", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Dirty Threshold", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 315 + }, + "id": 208, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_unstable{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Unstable - Pages unstable state in each zone for each NUMA node", + "refId": "D", + "step": 240 + }, + { + "expr": "node_vmstat_nr_dirtied{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Dirtied - Pages entering dirty state in each zone for each NUMA node", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Unstable / Dirtied", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 325 + }, + "id": 209, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_page_table_pages{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Page_table_pages - Page table pages in each zone for each NUMA node", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Page_table_pages", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 325 + }, + "id": 217, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_alloc_batch{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Alloc_batch - Pages allocated to other zones due to insufficient memory for each zone for each NUMA node", + "refId": "D", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Alloc_batch", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 335 + }, + "id": 213, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_isolated_anon{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Isolated_anon - Isolated anonymous memory pages in each zone for each NUMA node", + "refId": "D", + "step": 240 + }, + { + "expr": "node_vmstat_nr_isolated_file{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Isolated_file - Isolated file memory pages in each zone for each NUMA node", + "refId": "E", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Isolated", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 335 + }, + "id": 216, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_anon_pages{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Anon_pages - Anonymous mapped pagecache pages in each zone for each NUMA node", + "refId": "E", + "step": 240 + }, + { + "expr": "node_vmstat_nr_anon_transparent_hugepages{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Anon_transparent_hugepages - Anonymous transparent huge pages in each zone for each NUMA node", + "refId": "F", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Anon", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "Apps": "#629E51", + "Buffers": "#614D93", + "Cache": "#6D1F62", + "Cached": "#511749", + "Committed": "#508642", + "Free": "#0A437C", + "Harware Corrupted - Amount of RAM that the kernel identified as corrupted / not working": "#CFFAFF", + "Inactive": "#584477", + "PageTables": "#0A50A1", + "Page_Tables": "#0A50A1", + "RAM_Free": "#E0F9D7", + "Slab": "#806EB7", + "Slab_Cache": "#E0752D", + "Swap": "#BF1B00", + "Swap_Cache": "#C15C17", + "Swap_Free": "#2F575E", + "Unused": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 2, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 345 + }, + "id": 204, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 350, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_vmstat_nr_free_cma{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Free_cma - Free Contiguous Memory Allocator pages in each zone for each NUMA node", + "refId": "G", + "step": 240 + }, + { + "expr": "node_vmstat_nr_vmscan_write{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Vmscan_write - Pages written by VM scanner from LRU", + "refId": "B", + "step": 240 + }, + { + "expr": "node_vmstat_nr_vmscan_immediate_reclaim{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 2, + "legendFormat": "Immediate_reclaim - Prioritise for reclaim when writeback ends in each zone for each NUMA node", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Memory Page Misc", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Pages", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Memory Detail Vmstat Counters", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 269, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 346 + }, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_context_switches_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Context switches", + "refId": "A", + "step": 240 + }, + { + "expr": "irate(node_intr_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Interrupts", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Context Switches / Interrupts", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 346 + }, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_load1{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 1m", + "refId": "A", + "step": 480 + }, + { + "expr": "node_load5{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 5m", + "refId": "B", + "step": 480 + }, + { + "expr": "node_load15{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Load 15m", + "refId": "C", + "step": 480 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "System Load", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Load", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 356 + }, + "id": 259, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Critical*./", + "color": "#E24D42", + "fill": 0 + }, + { + "alias": "/.*Max*./", + "color": "#EF843C", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_interrupts_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ type }} - {{ info }}", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Interrupts Detail", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 356 + }, + "id": 64, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Max*./", + "color": "#890F02", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_max_fds{instance=~\"$node:$port\",job=~\"$job\"}", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Maximum open file descriptors", + "refId": "A", + "step": 240 + }, + { + "expr": "process_open_fds{instance=~\"$node:$port\",job=~\"$job\"}", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Open file descriptors", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "File Descriptors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Descriptors", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 366 + }, + "id": 151, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_entropy_available_bits{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Entropy available to random number generators", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Entropy", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Entropy", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 366 + }, + "id": 62, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_procs_blocked{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Processes blocked waiting for I/O to complete", + "refId": "A", + "step": 240 + }, + { + "expr": "node_procs_running{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Processes in runnable state", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Processes State", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Processes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 376 + }, + "id": 148, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(node_forks_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "Processes forks second", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Processes Forks", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Forks / sec", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 376 + }, + "id": 149, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_virtual_memory_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Processes virtual memory size in bytes", + "refId": "C", + "step": 240 + }, + { + "expr": "process_resident_memory_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Processes resident memory size in bytes", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Processes Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 386 + }, + "id": 168, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Variation*./", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_timex_sync_status{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Is clock synchronized to a reliable server (1 = yes, 0 = no)", + "refId": "B", + "step": 240 + }, + { + "expr": "node_timex_frequency_adjustment_ratio{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Local clock frequency adjustment", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Time Syncronized Status", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 386 + }, + "id": 260, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Variation*./", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_timex_estimated_error_seconds{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Estimated error in seconds", + "refId": "B", + "step": 240 + }, + { + "expr": "node_timex_offset_seconds{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Time offset in between local system and reference clock", + "refId": "A", + "step": 240 + }, + { + "expr": "node_timex_maxerror_seconds{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Maximum error in seconds", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Time Syncronized Drift", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "Seconds", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 396 + }, + "id": 158, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Critical*./", + "color": "#E24D42", + "fill": 0 + }, + { + "alias": "/.*Max*./", + "color": "#EF843C", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_hwmon_temp_celsius{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} temp", + "refId": "A", + "step": 240 + }, + { + "expr": "node_hwmon_temp_crit_alarm_celsius{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Critical Alarm", + "refId": "B", + "step": 240 + }, + { + "expr": "node_hwmon_temp_crit_celsius{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Critical", + "refId": "C", + "step": 240 + }, + { + "expr": "node_hwmon_temp_crit_hyst_celsius{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Critical Historical", + "refId": "D", + "step": 240 + }, + { + "expr": "node_hwmon_temp_max_celsius{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ chip }} {{ sensor }} Max", + "refId": "E", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Hardware temperature monitor", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "celsius", + "label": "Temperature", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "System Detail", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 270, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 397 + }, + "id": 9, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_reads_completed_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - Reads completed", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_writes_completed_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Writes completed", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk IOps Completed", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "IO read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 397 + }, + "id": 33, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_read_bytes_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "{{device}} - Read bytes", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_written_bytes_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Written bytes", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk R/W Data", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": "Bytes read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 3, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 407 + }, + "id": 37, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_read_time_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "hide": false, + "intervalFactor": 4, + "legendFormat": "{{device}} - Read time ms", + "refId": "A", + "step": 8 + }, + { + "expr": "irate(node_disk_write_time_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Write time ms", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk R/W Time", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": "Millisec. read (-) / write (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 407 + }, + "id": 35, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_time_weighted_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO time weighted", + "refId": "A", + "step": 8 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk IOs Weighted", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": "Milliseconds", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 417 + }, + "id": 133, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Read.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_reads_merged_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Read merged", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_disk_writes_merged_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "{{device}} - Write merged", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk R/W Merged", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "I/Os", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 3, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 417 + }, + "id": 36, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_time_seconds_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO time ms", + "refId": "A", + "step": 8 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Milliseconds Spent Doing I/Os", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": "Milliseconds", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 427 + }, + "id": 34, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#BA43A9" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_disk_io_now{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO now", + "refId": "A", + "step": 8 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Disk IOs Current in Progress", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "iops", + "label": "I/Os", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 427 + }, + "id": 66, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*sda_.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*sdb_.*/", + "color": "#EAB839" + }, + { + "alias": "/.*sdc_.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*sdd_.*/", + "color": "#EF843C" + }, + { + "alias": "/.*sde_.*/", + "color": "#E24D42" + }, + { + "alias": "/.*sda1.*/", + "color": "#584477" + }, + { + "alias": "/.*sda2_.*/", + "color": "#B7DBAB" + }, + { + "alias": "/.*sda3_.*/", + "color": "#F4D598" + }, + { + "alias": "/.*sdb1.*/", + "color": "#0A50A1" + }, + { + "alias": "/.*sdb2.*/", + "color": "#BF1B00" + }, + { + "alias": "/.*sdb3.*/", + "color": "#E0752D" + }, + { + "alias": "/.*sdc1.*/", + "color": "#962D82" + }, + { + "alias": "/.*sdc2.*/", + "color": "#614D93" + }, + { + "alias": "/.*sdc3.*/", + "color": "#9AC48A" + }, + { + "alias": "/.*sdd1.*/", + "color": "#65C5DB" + }, + { + "alias": "/.*sdd2.*/", + "color": "#F9934E" + }, + { + "alias": "/.*sdd3.*/", + "color": "#EA6460" + }, + { + "alias": "/.*sde1.*/", + "color": "#E0F9D7" + }, + { + "alias": "/.*sdd2.*/", + "color": "#FCEACA" + }, + { + "alias": "/.*sde3.*/", + "color": "#F9E2D2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_textfile_scrape_error{instance=~\"$node:$port\",job=~\"$job\"}", + "intervalFactor": 4, + "legendFormat": "Textfile scrape error (1 = true)", + "refId": "A", + "step": 8 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Open Error File", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Errors", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Disk Detail", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 271, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": 3, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 428 + }, + "id": 43, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_avail_bytes{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Available", + "metric": "", + "refId": "A", + "step": 4 + }, + { + "expr": "node_filesystem_free_bytes{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Free", + "refId": "B", + "step": 2 + }, + { + "expr": "node_filesystem_size_bytes{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Size", + "refId": "D", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Filesystem space available", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 428 + }, + "id": 41, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_files_free{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - Free file nodes", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "File Nodes Free", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "File Nodes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 438 + }, + "id": 28, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filefd_maximum{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 4, + "legendFormat": "Max open files", + "refId": "A", + "step": 8 + }, + { + "expr": "node_filefd_allocated{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Open files", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "File Descriptor", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Files", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 438 + }, + "id": 219, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_files{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - File nodes total", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "File Nodes Size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "File Nodes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { + "/ ReadOnly": "#890F02" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 448 + }, + "id": 44, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 4, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_filesystem_readonly{instance=~\"$node:$port\",job=~\"$job\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{mountpoint}} - ReadOnly", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Filesystem in ReadOnly", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Read Only", + "logBase": 1, + "max": "1", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Filesystem Detail", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 272, + "panels": [ + { + "aliasColors": { + "receive_packets_eth0": "#7EB26D", + "receive_packets_lo": "#E24D42", + "transmit_packets_eth0": "#7EB26D", + "transmit_packets_lo": "#E24D42" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 449 + }, + "id": 60, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_packets_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive", + "refId": "O", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_packets_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit", + "refId": "P", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic by Packets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "Packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 449 + }, + "id": 142, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.errors.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.errors.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.errors.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.errors.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*.errors.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*.errors.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*.errors.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_errs_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive errors", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_errs_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Rransmit errors", + "refId": "F", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Errors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "Packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 459 + }, + "id": 143, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.drop.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.drop.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.drop.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.drop.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*.drop.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*.drop.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*.drop.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_drop_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive drop", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_drop_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit drop", + "refId": "H", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Drop", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "Packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 459 + }, + "id": 141, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.compressed.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.compressed.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.compressed.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.compressed.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*.compressed.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*.compressed.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*.compressed.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_compressed_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive compressed", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_compressed_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit compressed", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Compressed", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "Packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 469 + }, + "id": 146, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.multicast.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.multicast.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.multicast.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.multicast.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*.multicast.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*.multicast.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*.multicast.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_multicast_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive multicast", + "refId": "M", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Multicast", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "Packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 469 + }, + "id": 144, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.fifo.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.fifo.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.fifo.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.fifo.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*.fifo.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*.fifo.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*.fifo.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_fifo_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive fifo", + "refId": "I", + "step": 4 + }, + { + "expr": "irate(node_network_transmit_fifo_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit fifo", + "refId": "J", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Fifo", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "Packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 479 + }, + "id": 145, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.frame.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.frame.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.frame.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.frame.*/", + "color": "#EF843C" + }, + { + "alias": "/.*eth3.*.frame.*/", + "color": "#E24D42" + }, + { + "alias": "/.*eth4.*.frame.*/", + "color": "#1F78C1" + }, + { + "alias": "/.*eth5.*.frame.*/", + "color": "#BA43A9" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_receive_frame_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{device}} - Receive frame", + "refId": "K", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Frame", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "pps", + "label": "Packets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 479 + }, + "id": 231, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.carrier.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.carrier.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.carrier.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.carrier.*/", + "color": "#EF843C" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_transmit_carrier_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Statistic transmit_carrier", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Carrier", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 489 + }, + "id": 232, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Trans.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*lo.*.carrier.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*eth0.*.carrier.*/", + "color": "#EAB839" + }, + { + "alias": "/.*eth1.*.carrier.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*eth2.*.carrier.*/", + "color": "#EF843C" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_network_transmit_colls_total{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{device}} - Transmit colls", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Network Traffic Colls", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 489 + }, + "id": 61, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "NF conntrack limit", + "color": "#890F02", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_nf_conntrack_entries{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NF conntrack entries", + "refId": "O", + "step": 4 + }, + { + "expr": "node_nf_conntrack_entries_limit{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NF conntrack limit", + "refId": "P", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "NF Contrack", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Entries", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 499 + }, + "id": 230, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_arp_entries{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ device }} - ARP entries", + "refId": "O", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ARP Entries", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Entries", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Network Traffic Detail", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 273, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 500 + }, + "id": 63, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_sockstat_TCP_alloc{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCP_alloc - Allocated sockets", + "refId": "D", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_inuse{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCP_inuse - Tcp sockets currently in use", + "refId": "E", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_mem{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCP_mem - Used memory for tcp", + "refId": "F", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_orphan{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCP_orphan - Orphan sockets", + "refId": "H", + "step": 240 + }, + { + "expr": "node_sockstat_TCP_tw{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCP_tw - Sockets wating close", + "refId": "I", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Sockstat TCP", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Sockets", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 500 + }, + "id": 124, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_sockstat_UDPLITE_inuse{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "UDPLITE_inuse - Udplite sockets currently in use", + "refId": "J", + "step": 240 + }, + { + "expr": "node_sockstat_UDP_inuse{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "UDP_inuse - Udp sockets currently in use", + "refId": "K", + "step": 240 + }, + { + "expr": "node_sockstat_UDP_mem{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "UDP_mem - Used memory for udp", + "refId": "L", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Sockstat UDP", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Sockets", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 510 + }, + "id": 126, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_sockstat_sockets_used{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Sockets_used - Sockets currently in use", + "refId": "N", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Sockstat Used", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Sockets", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 510 + }, + "id": 220, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_sockstat_TCP_mem_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCP_mem_bytes - ", + "refId": "G", + "step": 240 + }, + { + "expr": "node_sockstat_UDP_mem_bytes{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "UDP_mem_bytes - ", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Sockstat Memory Size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "Bytes", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 520 + }, + "id": 125, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_sockstat_FRAG_inuse{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "FRAG_inuse - Frag sockets currently in use", + "refId": "A", + "step": 240 + }, + { + "expr": "node_sockstat_FRAG_memory{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "FRAG_memory - Used memory for frag", + "refId": "B", + "step": 240 + }, + { + "expr": "node_sockstat_RAW_inuse{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RAW_inuse - Raw sockets currently in use", + "refId": "C", + "step": 240 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Sockstat FRAG / RAW", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Sockets", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Network Sockstat", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 274, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 521 + }, + "height": "", + "id": 49, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Discards.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*NoRoutes.*/", + "color": "#EAB839" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Ip_InReceives{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InReceives - IP inreceives", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_DefaultTTL{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "DefaultTTL - Default TTL", + "refId": "B", + "step": 10 + }, + { + "expr": "irate(node_netstat_Ip_InDelivers{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InDelivers - IP indelivers", + "refId": "I", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_OutRequests{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutRequests - IP outrequests", + "refId": "P", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 521 + }, + "height": "", + "id": 221, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Octets.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*McastPkts.*/", + "color": "#EAB839" + }, + { + "alias": "/.*McastOctets.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*BcastPkts.*/", + "color": "#EF843C" + }, + { + "alias": "/.*BcastOctets.*/", + "color": "#E24D42" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_IpExt_InOctets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InOctets - Received octets", + "refId": "K", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_OutOctets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutOctets - Sent octets", + "refId": "Q", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP In / Out Octets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Octects out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 531 + }, + "height": "", + "id": 119, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Octets.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*McastPkts.*/", + "color": "#EAB839" + }, + { + "alias": "/.*McastOctets.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*BcastPkts.*/", + "color": "#EF843C" + }, + { + "alias": "/.*BcastOctets.*/", + "color": "#E24D42" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_IpExt_InBcastPkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InBcastPkts - Received IP broadcast datagrams", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_OutBcastPkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutBcastPkts - Sent IP broadcast datagrams", + "refId": "N", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Bcast", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 531 + }, + "height": "", + "id": 222, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Octets.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*McastPkts.*/", + "color": "#EAB839" + }, + { + "alias": "/.*McastOctets.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*BcastPkts.*/", + "color": "#EF843C" + }, + { + "alias": "/.*BcastOctets.*/", + "color": "#E24D42" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_IpExt_InBcastOctets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InBcastOctets - Received IP broadcast octets", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_OutBcastOctets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutBcastOctets - Sent IP broadcast octects", + "refId": "M", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Bcast Octets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Octets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 541 + }, + "height": "", + "id": 120, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Octets.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*McastPkts.*/", + "color": "#EAB839" + }, + { + "alias": "/.*McastOctets.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*BcastPkts.*/", + "color": "#EF843C" + }, + { + "alias": "/.*BcastOctets.*/", + "color": "#E24D42" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_IpExt_InMcastPkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InMcastPkts - Received IP multicast datagrams", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_OutMcastPkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutMcastPkts - Sent IP multicast datagrams", + "refId": "P", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Mcast", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 541 + }, + "height": "", + "id": 223, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Octets.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*McastPkts.*/", + "color": "#EAB839" + }, + { + "alias": "/.*McastOctets.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*BcastPkts.*/", + "color": "#EF843C" + }, + { + "alias": "/.*BcastOctets.*/", + "color": "#E24D42" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_IpExt_InMcastOctets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InMcastOctets - Received IP multicast octets", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_OutMcastOctets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutMcastOctets - Sent IP multicast octets", + "refId": "O", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Mcast Octets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Octets out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 551 + }, + "height": "", + "id": 81, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Ip_ForwDatagrams{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ForwDatagrams - IP outforwdatagrams", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_Forwarding{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Forwarding - IP forwarding", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Forwarding", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 551 + }, + "height": "", + "id": 122, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Ip_FragCreates{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "FragCreates - IP fragmentation creations", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_FragFails{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "FragFails - IP fragmentation failures", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_FragOKs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "FragOKs - IP fragmentation oks", + "refId": "G", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Fragmented", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 561 + }, + "height": "", + "id": 51, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_IpExt_InCEPkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InCEPkts - Congestion Experimented datagrams in", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_InECT0Pkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InECT0Pkts - Datagrams received with ECT(0)", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_InECT1Pkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InECT1Pkt - Datarams received with ECT(1)", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_InNoECTPkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InNoECTPkts - Datagrams received with NOECT", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP ECT / CEP", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 561 + }, + "height": "", + "id": 123, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Ip_ReasmFails{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ReasmFails - IP reassembly failures", + "refId": "Q", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_ReasmOKs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ReasmOKs - IP reassembly oks", + "refId": "R", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_ReasmReqds{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ReasmReqds - IP reassembly requireds", + "refId": "S", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_ReasmTimeout{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ReasmTimeout - IP reasmtimeout", + "refId": "T", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Reasambled", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 571 + }, + "height": "", + "id": 118, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": 300, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": null, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Discards.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*NoRoutes.*/", + "color": "#EAB839" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Ip_InDiscards{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InDiscards - IP indiscards", + "refId": "J", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_InHdrErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InHdrErrors - IP inhdrerrors", + "refId": "K", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_InUnknownProtos{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InUnknownProtos - IP inunknownprotos", + "refId": "M", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_OutDiscards{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutDiscards - IP outdiscards", + "refId": "N", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_OutNoRoutes{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutNoRoutes - IP outnoroutes", + "refId": "O", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_InNoRoutes{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InNoRoutes - IP datagrams discarded due to no routes in forwarding path", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_InCsumErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InCsumErrors - IP datagrams with checksum errors", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_IpExt_InTruncatedPkts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InTruncatedPkts - IP datagrams discarded due to frame not carrying enough data", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_Ip_InAddrErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InAddrErrors - IP inaddrerrors", + "refId": "D", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Netstat IP Errors / Discards", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Network Netstat", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 275, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 572 + }, + "height": "", + "id": 52, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*InSegs.*/", + "color": "#CCA300" + }, + { + "alias": "/.*OutSegs.*/", + "color": "#CCA300" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Tcp_InCsumErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InCsumErrors - Segments received with checksum errors", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_InErrs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InErrs - Segments received in error (e.g., bad TCP checksums)", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_InSegs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InSegs - Segments received, including those received in error. This count includes segments received on currently established connections", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_OutRsts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutRsts - Segments sent containing the RST flag", + "refId": "I", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_OutSegs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutSegs - Segments sent, including those on current connections but excluding those containing only retransmitted octets", + "refId": "J", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_RetransSegs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RetransSegs - Segments retransmitted - that is, the number of TCP segments transmitted containing one or more previously transmitted octets", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Segments", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Segments out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 572 + }, + "height": "", + "id": 85, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*MaxConn *./", + "color": "#890F02", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_netstat_Tcp_CurrEstab{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "CurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT", + "refId": "C", + "step": 4 + }, + { + "expr": "node_netstat_Tcp_MaxConn{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "MaxConn - Limit on the total number of TCP connections the entity can support (Dinamic is \"-1\")", + "refId": "H", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Connections", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Connections", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 582 + }, + "height": "", + "id": 86, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_netstat_Tcp_RtoAlgorithm{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "RtoAlgorithm - Algorithm used to determine the timeout value used for retransmitting unacknowledged octets", + "refId": "M", + "step": 4 + }, + { + "expr": "node_netstat_Tcp_RtoMax{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "RtoMax - Maximum value permitted by a TCP implementation for the retransmission timeout, measured in milliseconds", + "refId": "N", + "step": 4 + }, + { + "expr": "node_netstat_Tcp_RtoMin{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "RtoMin - Minimum value permitted by a TCP implementation for the retransmission timeout, measured in milliseconds", + "refId": "O", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Retransmission", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": "Milliseconds", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 582 + }, + "height": "", + "id": 82, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Tcp_ActiveOpens{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ActiveOpens - TCP connections that have made a direct transition to the SYN-SENT state from the CLOSED state", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_AttemptFails{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "AttemptFails - TCP connections that have made a direct transition to the CLOSED state from either the SYN-SENT and SYN-RCVD", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_EstabResets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "EstabResets - TCP connections that have made a direct transition to the CLOSED state from either the ESTABLISHED state or the CLOSE-WAIT state", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_Tcp_PassiveOpens{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "PassiveOpens - TCP connections that have made a direct transition to the SYN-RCVD state from the LISTEN state", + "refId": "K", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Direct Transition", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Connections", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Network Netstat TCP", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 36 + }, + "id": 276, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 583 + }, + "height": "", + "id": 94, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPAbortOnClose{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPAbortOnClose - Connections aborted due to early user close", + "refId": "V", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPAbortOnData{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPAbortOnData - Connections aborted due to unexpected data", + "refId": "W", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPAbortOnLinger{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPAbortOnLinger - Connections aborted in lingered state after being closed", + "refId": "X", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPAbortOnMemory{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPAbortOnMemory - Connections aborted before attached to a socket", + "refId": "Y", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPAbortOnTimeout{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPAbortOnTimeout - Connections aborted due timeout", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPAbortFailed{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPAbortFailed - Connections aborted without send RST due insuffient memory", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPTimeouts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPTimeouts - Other TCP connections timeouts", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Aborts / Tiemouts", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Connections", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 583 + }, + "height": "", + "id": 92, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_DelayedACKLocked{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "DelayedACKLocked - Delayed acks further delayed because of locked socket", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_DelayedACKLost{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "DelayedACKLost - Times quick ack mode was activated", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_DelayedACKs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "DelayedACKs - Delayed acks sent", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Delayed ACK", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 593 + }, + "height": "", + "id": 91, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Sent.*/", + "transform": "negative-Y" + }, + { + "alias": "SyncookiesSent - SYN cookies sent", + "color": "#E0F9D7" + }, + { + "alias": "SyncookiesRecv - SYN cookies received", + "color": "#E0F9D7" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_SyncookiesFailed{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "SyncookiesFailed - Invalid SYN cookies received", + "refId": "R", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_SyncookiesRecv{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "SyncookiesRecv - SYN cookies received", + "refId": "S", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_SyncookiesSent{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "SyncookiesSent - SYN cookies sent", + "refId": "T", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSYNChallenge{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SynChallenge - Challenge ACKs sent in response to SYN packets", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPChallengeACK{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "TCPChallengeACK - Challenge ACKs sent (RFC 5961 3.2)", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP SynCookie / Challenge", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 593 + }, + "height": "", + "id": 90, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPLossFailures{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPLossFailures - Timeouts in loss state", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPLossProbeRecovery{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPLossProbeRecovery - TCP loss probe recoveries", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPLossProbes{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPLossProbes - Sent TCP loss probes", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPLossUndo{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPLossUndo - Congestion windows recovered without slow start after partial ack", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPLostRetransmit{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPLostRetransmit - Retransmits lost", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP LOSS", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 603 + }, + "height": "", + "id": 53, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_ListenDrops{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ListenDrops - SYNs to LISTEN sockets ignored", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_LockDroppedIcmps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "LockDroppedIcmps - ICMP packets dropped because socket was locked", + "refId": "J", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDeferAcceptDrop{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPDeferAcceptDrop - Dropped ACK frames received by a socket in SYN_RECV state", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPBacklogDrop{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPBacklogDrop - Packets dropped bacause the socket's receive queue was full", + "refId": "P", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_OutOfWindowIcmps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutOfWindowIcmps - ICMP packets dropped because they were out-of-window", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPMinTTLDrop{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPMinTTLDrop - TCP packets dropped under minTTL condition", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP DROPS", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 603 + }, + "height": "", + "id": 101, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPForwardRetrans{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPForwardRetrans - Packets losts retransmitted with Forward RTO-Recovery", + "refId": "O", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSlowStartRetrans{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPSlowStartRetrans - Packets losts retransmitted after a slow start", + "refId": "P", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSynRetrans{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPSynRetrans - SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits", + "refId": "Q", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSpuriousRTOs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSpuriousRTOs - FRTO's successfully detected spurious RTOs", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSpuriousRtxHostQueues{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSpuriousRtxHostQueues - Times detected that the fast clone is not yet freed in tcp_transmit_skb()", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFullUndo{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPFullUndo - Retransmits that undid the CWND reduction", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPRetransFail{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPRetransFail - Failed tcp_retransmit_skb() calls", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPPartialUndo{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPPartialUndo - Congestion windows partially recovered using Hoe heuristic", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Retrans", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 613 + }, + "height": "", + "id": 87, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_PruneCalled{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "PruneCalled - Pkts pruned from recv queue because of soc buf overrun", + "refId": "P", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_RcvPruned{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "RcvPruned - Packets pruned from receive queue", + "refId": "Q", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_OfoPruned{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OfoPruned - Packets dropped from out-of-order queue because of socket buffer overrun", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Pruned", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 613 + }, + "height": "", + "id": 96, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPDirectCopyFromBacklog{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPDirectCopyFromBacklog - Packets directly received from backlog", + "refId": "M", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDirectCopyFromPrequeue{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPDirectCopyFromPrequeue - Packets directly received from prequeue", + "refId": "N", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Direct Copy", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 623 + }, + "height": "", + "id": 100, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TW{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TW - TCP sockets finished time wait in fast timer", + "refId": "O", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TWKilled{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TWKilled - TCP sockets finished time wait in slow timer", + "refId": "P", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TWRecycled{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TWRecycled - Time wait sockets recycled by time stamp", + "refId": "Q", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPTimeWaitOverflow{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPTimeWaitOverflow - Occurences of time wait bucket overflow", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP TimeWait", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 623 + }, + "height": "", + "id": 93, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_PAWSActive{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "PAWSActive - Active connections rejected because of time stamp", + "refId": "M", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_PAWSEstab{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "PAWSEstab - Pkts rejects in estab connections because of timestamp", + "refId": "N", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_PAWSPassive{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "PAWSPassive - Passive connections rejected because of time stamp", + "refId": "O", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP PAWS", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 633 + }, + "height": "", + "id": 98, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPSackRecovery{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSackRecovery - Times recovered from packet loss by selective acknowledgements", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSackRecoveryFail{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSackRecoveryFail - Issue while recovering packets lost using selective ACK", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSackShiftFallback{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSackShiftFallback - SACKs fallbacks", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSackShifted{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSackShifted - SACKs shifted", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSACKDiscard{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSackDiscard - Discarded due invalid SACK block.", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSackFailures{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSackFailures - Timeouts after SACK recovery", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSackMerged{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSackMerged - SACKs merged", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSACKReneging{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSACKReneging - Bad SACK blocks received", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSACKReorder{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPSACKReorder - Times detected reordering using SACK", + "refId": "I", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP SACK", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 633 + }, + "height": "", + "id": 95, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPDSACKIgnoredOld{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPDSACKIgnoredOld - Discarded packets with duplicate SACK while retransmitting", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDSACKOfoRecv{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPDSACKOfoRecv - DSACKs for out of order packets received", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDSACKOfoSent{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPDSACKOfoSent - DSACKs sent for out of order packets", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDSACKOldSent{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPDSACKOldSent - DSACKs sent for old packets", + "refId": "I", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDSACKRecv{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPDSACKRecv - DSACKs received", + "refId": "J", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDSACKUndo{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPDSACKUndo - Discarded packets with erroneous retransmit", + "refId": "K", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPDSACKIgnoredNoUndo{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPDSACKIgnoredNoUndo - Discarded packets with duplicate SACK", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP DSACK", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 643 + }, + "height": "", + "id": 97, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPFastOpenActive{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPFastOpenActive - Successful outbound TFO connections", + "refId": "P", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFastOpenActiveFail{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPFastOpenActiveFail - SYN-ACK packets received that did not acknowledge data sent in the SYN packet and caused a retransmissions without SYN data", + "refId": "Q", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFastOpenCookieReqd{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPFastOpenCookieReqd - Inbound SYN packets requesting TFO with TFO set but no cookie", + "refId": "R", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFastOpenListenOverflow{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPFastOpenListenOverflow - Times the fastopen listen queue overflowed", + "refId": "S", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFastOpenPassive{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPFastOpenPassive - Successful inbound TFO connections", + "refId": "T", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFastOpenPassiveFail{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPFastOpenPassiveFail - Inbound SYN packets with TFO cookie that was invalid", + "refId": "U", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFastRetrans{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPFastRetrans - Packets lost fast-retransmitted", + "refId": "V", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP FastOpen / FastRetrans", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 643 + }, + "height": "", + "id": 99, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPHPAcks{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPHPAcks - Acknowledgments not containing data received", + "refId": "Z", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPHPHits{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPHPHits - Packets header predicted", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPHPHitsToUser{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPHPHitsToUser - Packets header predicted and directly queued to user", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP HP", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 653 + }, + "height": "", + "id": 102, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPToZeroWindowAdv{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPToZeroWindowAdv - Times window went from zero to non-zero", + "refId": "V", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPWantZeroWindowAdv{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPWantZeroWindowAdv - Times zero window announced", + "refId": "W", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPFromZeroWindowAdv{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPFromZeroWindowAdv - Times window went from zero to non-zero", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP ZeroWindow", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 653 + }, + "height": "", + "id": 103, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPFACKReorder{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPFACKReorder - Detected packets with re-ordering using FACK", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPTSReorder{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPTSReorder - Times detected packets with re-ordering using timestamp option", + "refId": "S", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Reorder", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 663 + }, + "height": "", + "id": 162, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPRenoFailures{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPRenoFailures - Timeouts after reno fast retransmit", + "refId": "O", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPRenoRecovery{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPRenoRecovery - Times recovered from packet loss due to fast retransmit", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPRenoRecoveryFail{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPRenoRecoveryFail - Times reno fast retransmits failed", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPRenoReorder{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPRenoReorder - Times detected reordering using reno fast retransmit", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Reno", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 663 + }, + "height": "", + "id": 163, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPReqQFullDoCookies{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPReqQFullDoCookies - Times SYNCOOKIE was replied to client", + "refId": "O", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPReqQFullDrop{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPReqQFullDrop - Times SYN request was dropped due to disabled syncookies", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP ReqQ", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 673 + }, + "height": "", + "id": 164, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPOFODrop{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPOFODrop - Packets meant to be queued in OFO but dropped because socket rcvbuf limit reached", + "refId": "P", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPOFOMerge{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPOFOMerge - Packets in OFO that were merged with other packets", + "refId": "Q", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPOFOQueue{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPOFOQueue - Packets queued in OFO queue", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Out of order", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 673 + }, + "height": "", + "id": 165, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPMD5NotFound{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPMD5NotFound - Times MD5 hash expected but not found", + "refId": "Z", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPMD5Unexpected{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPMD5Unexpected - Times MD5 hash unexpected but found", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP MD5", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 683 + }, + "height": "", + "id": 166, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPPrequeued{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPPrequeued - Packets directly queued to recvmsg prequeue", + "refId": "Z", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPPrequeueDropped{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPPrequeueDropped - Packets dropped from prequeue", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Prequeued", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 683 + }, + "height": "", + "id": 167, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPRcvCoalesce{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPRcvCoalesce - Times tried to coalesce the receive queue", + "refId": "Z", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPRcvCollapsed{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "TCPRcvCollapsed - Packets collapsed in receive queue due to low socket buffer", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Rcv", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 693 + }, + "height": "", + "id": 224, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPOrigDataSent{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPOrigDataSent - Outgoing packets with original data", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Original Data", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 693 + }, + "height": "", + "id": 225, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_ArpFilter{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ArpFilter - Arp packets filtered", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_IPReversePathFilter{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "IPReversePathFilter - Packets arrive from non directly connected network", + "refId": "G", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Filters", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 703 + }, + "height": "", + "id": 226, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPPureAcks{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPPureAcks - Acknowledgments not containing data payload received", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Pure ACK", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 703 + }, + "height": "", + "id": 227, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_TCPAutoCorking{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "TCPAutoCorking - Times stack detected skb was underused and its flush was deferred", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Auto Corking", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 713 + }, + "height": "", + "id": 104, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_TcpExt_BusyPollRxPackets{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "BusyPollRxPackets - Low latency application-fetched packets", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_EmbryonicRsts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "EmbryonicRsts - Resets received for embryonic SYN_RECV sockets", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_ListenOverflows{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "ListenOverflows - Times the listen queue of a socket overflowed", + "refId": "I", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPSchedulerFailed{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "TCPSchedulerFailed - Times receiver scheduled too late for direct processing", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_TcpExt_TCPMemoryPressures{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "intervalFactor": 2, + "legendFormat": "TCPMemoryPressures - TCP ran low on memory", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "TCP Issues", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Network Netstat TCP Linux MIPs", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 37 + }, + "id": 277, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 714 + }, + "height": "", + "id": 55, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Snd.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Datagrams.*/", + "color": "#EAB839" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Udp_InDatagrams{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InDatagrams - Datagrams received", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_OutDatagrams{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutDatagrams - Datagrams sent", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "UDP In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 714 + }, + "height": "", + "id": 109, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Snd.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*bufErrors.*/", + "color": "#70DBED" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Udp_InCsumErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InCsumErrors - Datagrams with checksum errors", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_InErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InErrors - Datagrams that could not be delivered to an application", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_RcvbufErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RcvbufErrors - Datagrams for which not enough socket buffer memory to receive", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_SndbufErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SndbufErrors - Datagrams for which not enough socket buffer memory to transmit", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_Udp_NoPorts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NoPorts - Datagrams received on a port with no listener", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "UDP Errors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 724 + }, + "height": "", + "id": 57, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Datagrams.*/", + "color": "#EAB839" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_UdpLite_InDatagrams{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InDatagrams - Packets received", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_UdpLite_OutDatagrams{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutDatagrams - Packets sent", + "refId": "E", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "UDP Lite In / Out", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 724 + }, + "height": "", + "id": 110, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*bufErrors.*/", + "color": "#6ED0E0" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_UdpLite_InCsumErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InCsumErrors - Datagrams with checksum errors", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_UdpLite_InErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InErrors - Datagrams that could not be delivered to an application", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_UdpLite_RcvbufErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "RcvbufErrors - Datagrams for which not enough socket buffer memory to receive", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_UdpLite_SndbufErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "SndbufErrors - Datagrams for which not enough socket buffer memory to transmit", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_UdpLite_NoPorts{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "NoPorts - Datagrams received on a port with no listener", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "UDP Lite Errors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Datagrams out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Network Netstat UDP", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 278, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 725 + }, + "height": "", + "id": 50, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Type3.*/", + "color": "#EAB839" + }, + { + "alias": "/.*SrcQuenchs.*/", + "color": "#705DA0" + }, + { + "alias": "/.*ParmProb.*/", + "color": "#70DBED" + }, + { + "alias": "/.*TimeExcds.*/", + "color": "#EA6460" + }, + { + "alias": "/.*DestUnreachs.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*InErrors.*/", + "color": "#890F02" + }, + { + "alias": "/.*OutErrors.*/", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InErrors - Messages which the entity received but determined as having ICMP-specific errors (bad ICMP checksums, bad length, etc.)", + "refId": "I", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutErrors - Messages which this entity did not send due to problems discovered within ICMP, such as a lack of buffers", + "refId": "V", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InDestUnreachs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InDestUnreachs - Destination Unreachable messages received", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutDestUnreachs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutDestUnreachs - Destination Unreachable messages sent", + "refId": "B", + "step": 4 + }, + { + "expr": "irate(node_netstat_IcmpMsg_InType3{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InType3 - Destination unreachable", + "refId": "K", + "step": 4 + }, + { + "expr": "irate(node_netstat_IcmpMsg_OutType3{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutType3 - Destination unreachable", + "refId": "L", + "step": 4 + }, + { + "expr": "irate(node_netstat_IcmpMsg_InType11{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InType11 - Time Exceeded", + "refId": "C", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ICMP Errors 1", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 725 + }, + "height": "", + "id": 147, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Type3.*/", + "color": "#EAB839" + }, + { + "alias": "/.*SrcQuenchs.*/", + "color": "#705DA0" + }, + { + "alias": "/.*ParmProb.*/", + "color": "#70DBED" + }, + { + "alias": "/.*TimeExcds.*/", + "color": "#EA6460" + }, + { + "alias": "/.*DestUnreachs.*/", + "color": "#7EB26D" + }, + { + "alias": "/.*InErrors.*/", + "color": "#890F02" + }, + { + "alias": "/.*OutErrors.*/", + "color": "#890F02" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InCsumErrors{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InCsumErrors - Messages with ICMP checksum errors", + "refId": "E", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InTimeExcds{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InTimeExcds - Time Exceeded messages received", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutTimeExcds{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutTimeExcds - Time Exceeded messages sent", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InParmProbs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InParmProbs - Parameter Problem messages received", + "refId": "F", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutParmProbs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutParmProb - Parameter Problem messages sent", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InSrcQuenchs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "InSrcQuenchs - Source Quench messages received", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutSrcQuenchs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "OutSrcQuenchs - Source Quench messages sent", + "refId": "J", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ICMP Errors 2", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 735 + }, + "height": "", + "id": 115, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*Msgs.*/", + "color": "#6ED0E0" + }, + { + "alias": "/.*Redirects.*/", + "color": "#F9BA8F" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InMsgs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InMsgs - Messages which the entity received. Note that this counter includes all those counted by icmpInErrors", + "refId": "J", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InRedirects{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InRedirects - Redirect messages received", + "refId": "L", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutMsgs{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutMsgs - Messages which this entity attempted to send. Note that this counter includes all those counted by icmpOutErrors", + "refId": "W", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutRedirects{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutRedirects - Redirect messages sent. For a host, this object will always be zero, since hosts do not send redirects", + "refId": "Y", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ICMP In / Out - Messages / Redirects", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 735 + }, + "height": "", + "id": 112, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*TimestampReps.*/", + "color": "#F9934E" + }, + { + "alias": "/.*Timestamps -.*/", + "color": "#6ED0E0" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InTimestampReps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InTimestampReps - Timestamp Reply messages received", + "refId": "O", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InTimestamps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InTimestamps - Timestamp (request) messages received", + "refId": "P", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutTimestampReps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutTimestampReps - Timestamp Reply messages sent", + "refId": "A", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutTimestamps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutTimestamps - Timestamp (request) messages sent", + "refId": "B", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ICMP Timestamps", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 745 + }, + "height": "", + "id": 114, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*EchoReps.*/", + "color": "#D683CE" + }, + { + "alias": "/.*Echos -.*/", + "color": "#F9934E" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InEchoReps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InEchoReps - Echo Reply messages received", + "refId": "G", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InEchos{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InEchos - Echo (request) messages received", + "refId": "H", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutEchoReps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutEchoReps - Echo Reply messages sent", + "refId": "T", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutEchos{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutEchos - Echo (request) messages sent", + "refId": "U", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ICMP Echos", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "decimals": null, + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 745 + }, + "height": "", + "id": 113, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideZero": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 2, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/.*Out.*/", + "transform": "negative-Y" + }, + { + "alias": "/.*AddrMaskReps.*/", + "color": "#B7DBAB" + }, + { + "alias": "/.*Masks -.*/", + "color": "#E5AC0E" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(node_netstat_Icmp_InAddrMaskReps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InAddrMaskReps - Address Mask Reply messages received", + "refId": "C", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_InAddrMasks{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "InAddrMasks - Address Mask Request messages received", + "refId": "D", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutAddrMaskReps{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutAddrMaskReps - Address Mask Reply messages sent", + "refId": "Q", + "step": 4 + }, + { + "expr": "irate(node_netstat_Icmp_OutAddrMasks{instance=~\"$node:$port\",job=~\"$job\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "OutAddrMasks - Address Mask Request messages sent", + "refId": "R", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ICMP Masks", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Messages out (-) / in (+)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Network Netstat ICMP", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 39 + }, + "id": 279, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 746 + }, + "id": 40, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "node_scrape_collector_duration_seconds{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{collector}} - Scrape duration", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Node Exporter Scrape Time", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": "Seconds", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "", + "fill": 2, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 746 + }, + "id": 157, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "node_scrape_collector_success{instance=~\"$node:$port\",job=~\"$job\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{collector}} - Scrape success", + "refId": "A", + "step": 4 + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Node Exporter Scrape Success", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Counter", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "title": "Node Exporter", + "type": "row" + } + ], + "refresh": false, + "schemaVersion": 16, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": {}, + "datasource": "Prometheus", + "hide": 0, + "includeAll": false, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": "label_values(node_exporter_build_info, job)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "Prometheus", + "hide": 0, + "includeAll": false, + "label": "Host:", + "multi": false, + "name": "node", + "options": [], + "query": "label_values(node_exporter_build_info{job=~\"$job\"}, instance)", + "refresh": 1, + "regex": "/([^:]+):.*/", + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "Prometheus", + "hide": 0, + "includeAll": false, + "label": "Port", + "multi": false, + "name": "port", + "options": [], + "query": "label_values(node_exporter_build_info{instance=~\"$node:(.*)\"}, instance)", + "refresh": 1, + "regex": "/[^:]+:(.*)/", + "sort": 3, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "Node Exporter", + "uid": "oQbaawXiz", + "version": 1 +} diff --git a/helm-charts/nem-monitoring/grafana-dashboards/onos-kpi.json b/helm-charts/nem-monitoring/grafana-dashboards/onos-kpi.json new file mode 100644 index 0000000..a1e2c0e --- /dev/null +++ b/helm-charts/nem-monitoring/grafana-dashboards/onos-kpi.json @@ -0,0 +1,652 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:204", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "iteration": 1541038643440, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 5, + "panels": [], + "repeat": "device", + "scopedVars": { + "device": { + "$$hashKey": "object:861", + "selected": false, + "text": "of:0000000000000001", + "value": "of:0000000000000001" + } + }, + "title": "Device $device", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeatDirection": "h", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:335", + "expr": "onos_rx_bytes_total{device_id=\"$device\"} / 1024 / 1024", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device_id }}:{{ port_id }}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Received MB", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 7, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeatDirection": "h", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:335", + "expr": "onos_tx_bytes_total{device_id=\"$device\"} / 1024 / 1024", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device_id }}:{{ port_id }}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Transmitted MB", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "scopedVars": { + "device": { + "$$hashKey": "object:861", + "selected": false, + "text": "of:0000000000000001", + "value": "of:0000000000000001" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:335", + "expr": "onos_rx_packets_total{device_id=\"$device\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device_id }}:{{ port_id }}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Received Packets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "scopedVars": { + "device": { + "$$hashKey": "object:861", + "selected": false, + "text": "of:0000000000000001", + "value": "of:0000000000000001" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:335", + "expr": "onos_tx_packets_total{device_id=\"$device\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device_id }}:{{ port_id }}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Transmitted Packets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 8, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeatDirection": "h", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:335", + "expr": "onos_rx_drop_packets_total{device_id=\"$device\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device_id }}:{{ port_id }}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Received Packets Dropped", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 9, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeatDirection": "h", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:335", + "expr": "onos_tx_drop_packets_total{device_id=\"$device\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device_id }}:{{ port_id }}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Transmitted Packets Dropped", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "10s", + "schemaVersion": 16, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "tags": [], + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": "Prometheus", + "hide": 0, + "includeAll": true, + "label": null, + "multi": true, + "name": "device", + "options": [], + "query": "label_values(onos_rx_packets_total, device_id)", + "refresh": 1, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "ONOS KPIs", + "uid": "kqqYHvaiz", + "version": 1 +} \ No newline at end of file diff --git a/helm-charts/nem-monitoring/grafana-dashboards/voltha-kpi.json b/helm-charts/nem-monitoring/grafana-dashboards/voltha-kpi.json new file mode 100644 index 0000000..b76bb2f --- /dev/null +++ b/helm-charts/nem-monitoring/grafana-dashboards/voltha-kpi.json @@ -0,0 +1,1172 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:894", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Display KPIs as collected by VOLTHA", + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "iteration": 1541700702670, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 7, + "panels": [], + "title": "Bytes", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Count the tx bytes on the NNI ports by device", + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 9, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:187", + "expr": "sum(voltha_tx_bytes_total{title=\"Ethernet\"})by(logical_device_id) / 1024 / 1024", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{logical_device_id}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Transmitted MB by device", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Count the rx bytes on the NNI ports by device", + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 10, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:241", + "expr": "sum(voltha_rx_bytes_total{title=\"Ethernet\"})by(logical_device_id) / 1024 / 1024", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{logical_device_id}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Received MB by device", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 2, + "panels": [], + "title": "Packets", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Count the tx packets on the NNI ports by device", + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:295", + "expr": "sum(voltha_tx_packets_total{title=\"Ethernet\"})by(logical_device_id)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{logical_device_id}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Transmitted packets by device", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Count the rx packets on the NNI ports by device", + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 5, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:349", + "expr": "sum(voltha_rx_packets_total{title=\"Ethernet\"})by(logical_device_id)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{logical_device_id}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Received packets by device", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 14, + "panels": [], + "title": "Realtime Traffic Data", + "type": "row" + }, + { + "alert": { + "conditions": [ + { + "evaluator": { + "params": [ + 5 + ], + "type": "gt" + }, + "operator": { + "type": "and" + }, + "query": { + "params": [ + "A", + "1m", + "now" + ] + }, + "reducer": { + "params": [], + "type": "sum" + }, + "type": "query" + } + ], + "executionErrorState": "alerting", + "frequency": "60s", + "handler": 1, + "name": "Realtime Incoming MB by NNI port alert", + "noDataState": "no_data", + "notifications": [] + }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 12, + "legend": { + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:362", + "expr": "delta(voltha_rx_bytes_total{title=\"Ethernet\"}[30s]) / 1024 / 1024", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{logical_device_id}}", + "refId": "A" + } + ], + "thresholds": [ + { + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": 5 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Realtime Incoming MB by NNI port", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:421", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:422", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 19, + "panels": [], + "title": "Per device informations", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 32 + }, + "id": 21, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": "olt", + "repeatDirection": "v", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:987", + "expr": "voltha_rx_bytes_total{title=\"PON\", logical_device_id=\"$olt\"} / 1024 / 1024", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pon_id}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Received MB per PON on device $olt", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1472", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1473", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 32 + }, + "id": 26, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 12, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": "olt", + "repeatDirection": "v", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:987", + "expr": "voltha_tx_bytes_total{title=\"PON\", logical_device_id=\"$olt\"} / 1024 / 1024", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pon_id}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Transmitted MB per PON on device $olt", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1472", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:1473", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 41 + }, + "id": 32, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:637", + "expr": "voltha_tx_bytes_total{title=\"Ethernet_Bridge_Port_History\", serial_number=\"$onu\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{serial_number}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ONU Transmitted Bytes on $onu", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 41 + }, + "id": 28, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:432", + "expr": "voltha_tx_packets_total{title=\"Ethernet_Bridge_Port_History\", serial_number=\"$onu\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{serial_number}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ONU Transmitted Packets on $onu", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 50 + }, + "id": 34, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:836", + "expr": "voltha_rx_bytes_total{title=\"Ethernet_Bridge_Port_History\", serial_number=\"$onu\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{serial_number}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ONU Received Bytes on $onu", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 50 + }, + "id": 30, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:537", + "expr": "voltha_rx_packets_total{title=\"Ethernet_Bridge_Port_History\", serial_number=\"$onu\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{serial_number}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "ONU Received Packets on $onu", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "15s", + "schemaVersion": 16, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "hide": 0, + "includeAll": true, + "label": "OLT Device", + "multi": false, + "name": "olt", + "options": [], + "query": "label_values(voltha_tx_bytes_total, logical_device_id)", + "refresh": 1, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "onu", + "options": [ + { + "$$hashKey": "object:232", + "selected": true, + "text": "All", + "value": "$__all" + }, + { + "$$hashKey": "object:233", + "selected": false, + "text": "ISKT71e801a0", + "value": "ISKT71e801a0" + } + ], + "query": "label_values(voltha_tx_packets_total{title=\"Ethernet_Bridge_Port_History\"}, serial_number)", + "refresh": 0, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "Voltha", + "uid": "i9V9JtOmz", + "version": 1 +} \ No newline at end of file diff --git a/helm-charts/nem-monitoring/grafana-dashboards/xos.json b/helm-charts/nem-monitoring/grafana-dashboards/xos.json new file mode 100644 index 0000000..7e4da5c --- /dev/null +++ b/helm-charts/nem-monitoring/grafana-dashboards/xos.json @@ -0,0 +1,7959 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:297", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Monitoring XOS Activities", + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "iteration": 1538693445200, + "links": [], + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 234, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:1453", + "expr": "rate(grpc_request_latency_seconds_sum[5m]) / rate(grpc_request_latency_seconds_count[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{model_name}} - {{endpoint}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Average request duration in the last 5 minutes", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 152, + "panels": [], + "title": "Requests by status", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": null, + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 10 + }, + "id": 227, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "repeat": "request_status", + "repeatDirection": "h", + "scopedVars": { + "request_status": { + "$$hashKey": "object:807", + "selected": false, + "text": "OK", + "value": "OK" + } + }, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "$$hashKey": "object:1071", + "expr": "sum(grpc_request_count_total{status=\"StatusCode.$request_status\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Total requests resulted in $request_status", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": null, + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 10 + }, + "id": 235, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 227, + "scopedVars": { + "request_status": { + "$$hashKey": "object:808", + "selected": false, + "text": "PERMISSION_DENIED", + "value": "PERMISSION_DENIED" + } + }, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "$$hashKey": "object:1071", + "expr": "sum(grpc_request_count_total{status=\"StatusCode.$request_status\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Total requests resulted in $request_status", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": null, + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 10 + }, + "id": 236, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 4, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 227, + "scopedVars": { + "request_status": { + "$$hashKey": "object:809", + "selected": false, + "text": "UNAUTHENTICATED", + "value": "UNAUTHENTICATED" + } + }, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "$$hashKey": "object:1071", + "expr": "sum(grpc_request_count_total{status=\"StatusCode.$request_status\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Total requests resulted in $request_status", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 77, + "panels": [], + "title": "Requests per model", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 20 + }, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": "model", + "repeatDirection": "h", + "scopedVars": { + "model": { + "selected": false, + "text": "AddressPool", + "value": "AddressPool" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 20 + }, + "id": 237, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "AttWorkflowDriverService", + "value": "AttWorkflowDriverService" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 20 + }, + "id": 238, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "AttWorkflowDriverServiceInstance", + "value": "AttWorkflowDriverServiceInstance" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 20 + }, + "id": 239, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "AttWorkflowDriverWhiteListEntry", + "value": "AttWorkflowDriverWhiteListEntry" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 29 + }, + "id": 240, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "BNGPortMapping", + "value": "BNGPortMapping" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 29 + }, + "id": 241, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ComputeServiceInstance", + "value": "ComputeServiceInstance" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 29 + }, + "id": 242, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Controller", + "value": "Controller" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 29 + }, + "id": 243, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ControllerNetwork", + "value": "ControllerNetwork" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 38 + }, + "id": 244, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ControllerRole", + "value": "ControllerRole" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 38 + }, + "id": 245, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ControllerSite", + "value": "ControllerSite" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 38 + }, + "id": 246, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ControllerSitePrivilege", + "value": "ControllerSitePrivilege" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 38 + }, + "id": 247, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ControllerSlice", + "value": "ControllerSlice" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 47 + }, + "id": 248, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ControllerSlicePrivilege", + "value": "ControllerSlicePrivilege" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 47 + }, + "id": 249, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ControllerUser", + "value": "ControllerUser" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 47 + }, + "id": 250, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Deployment", + "value": "Deployment" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 47 + }, + "id": 251, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "DynamicLoad", + "value": "DynamicLoad" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 56 + }, + "id": 252, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "FabricCrossconnectService", + "value": "FabricCrossconnectService" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 56 + }, + "id": 253, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "FabricCrossconnectServiceInstance", + "value": "FabricCrossconnectServiceInstance" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 56 + }, + "id": 254, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "FabricService", + "value": "FabricService" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 56 + }, + "id": 255, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Flavor", + "value": "Flavor" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 65 + }, + "id": 256, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Image", + "value": "Image" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 65 + }, + "id": 257, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ImageDeployments", + "value": "ImageDeployments" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 65 + }, + "id": 258, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Instance", + "value": "Instance" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 65 + }, + "id": 259, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "InterfaceType", + "value": "InterfaceType" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 74 + }, + "id": 260, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Modeldefs", + "value": "Modeldefs" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 74 + }, + "id": 261, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Network", + "value": "Network" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 74 + }, + "id": 262, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "NetworkParameter", + "value": "NetworkParameter" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 74 + }, + "id": 263, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "NetworkParameterType", + "value": "NetworkParameterType" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 83 + }, + "id": 264, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "NetworkSlice", + "value": "NetworkSlice" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 83 + }, + "id": 265, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "NetworkTemplate", + "value": "NetworkTemplate" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 83 + }, + "id": 266, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "NNIPort", + "value": "NNIPort" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 83 + }, + "id": 267, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Node", + "value": "Node" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 92 + }, + "id": 268, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "NodeLabel", + "value": "NodeLabel" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 92 + }, + "id": 269, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "NodeToSwitchPort", + "value": "NodeToSwitchPort" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 92 + }, + "id": 270, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "OLTDevice", + "value": "OLTDevice" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 92 + }, + "id": 271, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ONOSApp", + "value": "ONOSApp" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 101 + }, + "id": 272, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ONOSService", + "value": "ONOSService" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 101 + }, + "id": 273, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ONUDevice", + "value": "ONUDevice" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 101 + }, + "id": 274, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "PONONUPort", + "value": "PONONUPort" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 101 + }, + "id": 275, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "PONPort", + "value": "PONPort" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 110 + }, + "id": 276, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Port", + "value": "Port" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 110 + }, + "id": 277, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "PortInterface", + "value": "PortInterface" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 110 + }, + "id": 278, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Principal", + "value": "Principal" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 110 + }, + "id": 279, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Privilege", + "value": "Privilege" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 119 + }, + "id": 280, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "RCORDService", + "value": "RCORDService" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 119 + }, + "id": 281, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "RCORDSubscriber", + "value": "RCORDSubscriber" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 119 + }, + "id": 282, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Role", + "value": "Role" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 119 + }, + "id": 283, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Service", + "value": "Service" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 128 + }, + "id": 284, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServiceAttribute", + "value": "ServiceAttribute" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 128 + }, + "id": 285, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServiceDependency", + "value": "ServiceDependency" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 128 + }, + "id": 286, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServiceGraphConstraint", + "value": "ServiceGraphConstraint" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 128 + }, + "id": 287, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServiceInstance", + "value": "ServiceInstance" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 137 + }, + "id": 288, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServiceInstanceAttribute", + "value": "ServiceInstanceAttribute" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 137 + }, + "id": 289, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServiceInstanceLink", + "value": "ServiceInstanceLink" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 137 + }, + "id": 290, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServiceInterface", + "value": "ServiceInterface" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 137 + }, + "id": 291, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "ServicePort", + "value": "ServicePort" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 146 + }, + "id": 292, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Site", + "value": "Site" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 146 + }, + "id": 293, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "SiteDeployment", + "value": "SiteDeployment" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 146 + }, + "id": 294, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "SitePrivilege", + "value": "SitePrivilege" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 146 + }, + "id": 295, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "SiteRole", + "value": "SiteRole" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 155 + }, + "id": 296, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Slice", + "value": "Slice" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 155 + }, + "id": 297, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "SlicePrivilege", + "value": "SlicePrivilege" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 155 + }, + "id": 298, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "SliceRole", + "value": "SliceRole" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 155 + }, + "id": 299, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Switch", + "value": "Switch" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 164 + }, + "id": 300, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "SwitchPort", + "value": "SwitchPort" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 164 + }, + "id": 301, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Tag", + "value": "Tag" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 164 + }, + "id": 302, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "TenantWithContainer", + "value": "TenantWithContainer" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 164 + }, + "id": 303, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "TrustDomain", + "value": "TrustDomain" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 173 + }, + "id": 304, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "UNIPort", + "value": "UNIPort" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 173 + }, + "id": 305, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "User", + "value": "User" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 173 + }, + "id": 306, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "Utilities", + "value": "Utilities" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 173 + }, + "id": 307, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "VOLTService", + "value": "VOLTService" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 182 + }, + "id": 308, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "VOLTServiceInstance", + "value": "VOLTServiceInstance" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 182 + }, + "id": 309, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "XOSCore", + "value": "XOSCore" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "List all the request related to this model", + "fill": 1, + "gridPos": { + "h": 9, + "w": 6, + "x": 12, + "y": 182 + }, + "id": 310, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "minSpan": 6, + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatDirection": "h", + "repeatIteration": 1538693445200, + "repeatPanelId": 2, + "scopedVars": { + "model": { + "selected": false, + "text": "XOSGuiExtension", + "value": "XOSGuiExtension" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "$$hashKey": "object:492", + "expr": "grpc_request_count_total{model_name=\"$model\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{endpoint}} - {{status}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Requests for model $model", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transparent": false, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "10s", + "schemaVersion": 16, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": true, + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "hide": 0, + "includeAll": true, + "label": null, + "multi": true, + "name": "model", + "options": [], + "query": "label_values(grpc_request_count_total, model_name)", + "refresh": 2, + "regex": "", + "sort": 5, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "$$hashKey": "object:806", + "selected": true, + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "hide": 0, + "includeAll": true, + "label": null, + "multi": true, + "name": "request_status", + "options": [ + { + "$$hashKey": "object:806", + "selected": true, + "text": "All", + "value": "$__all" + }, + { + "$$hashKey": "object:807", + "selected": false, + "text": "OK", + "value": "OK" + }, + { + "$$hashKey": "object:808", + "selected": false, + "text": "PERMISSION_DENIED", + "value": "PERMISSION_DENIED" + }, + { + "$$hashKey": "object:809", + "selected": false, + "text": "UNAUTHENTICATED", + "value": "UNAUTHENTICATED" + } + ], + "query": "label_values(grpc_request_count_total, status)", + "refresh": 0, + "regex": ".+\\.(.+)", + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "XOS", + "uid": "vE-iQRJiz", + "version": 14 +} \ No newline at end of file diff --git a/helm-charts/nem-monitoring/requirements.yaml b/helm-charts/nem-monitoring/requirements.yaml new file mode 100644 index 0000000..a55e7ea --- /dev/null +++ b/helm-charts/nem-monitoring/requirements.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +dependencies: +- name: prometheus + version: 6.8.1 + repository: https://kubernetes-charts.storage.googleapis.com/ +- name: grafana + version: 1.12.0 + repository: https://kubernetes-charts.storage.googleapis.com/ + diff --git a/helm-charts/nem-monitoring/templates/NOTES.txt b/helm-charts/nem-monitoring/templates/NOTES.txt new file mode 100644 index 0000000..1838249 --- /dev/null +++ b/helm-charts/nem-monitoring/templates/NOTES.txt @@ -0,0 +1,12 @@ +Thank you for installing {{ .Chart.Name }}. + +Your release is named {{ .Release.Name }}. + +You can now access Grafana at: :{{ .Values.grafana.service.nodePort }} +using: + +username: {{ .Values.grafana.adminUser}} +password: {{ .Values.grafana.adminPassword}} + +and Prometheus at: :{{ .Values.prometheus.server.service.nodePort }} + diff --git a/helm-charts/nem-monitoring/templates/exporter-deployment.yaml b/helm-charts/nem-monitoring/templates/exporter-deployment.yaml new file mode 100644 index 0000000..530d952 --- /dev/null +++ b/helm-charts/nem-monitoring/templates/exporter-deployment.yaml @@ -0,0 +1,38 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: kpi-exporter + labels: + release: {{ .Release.Name }} +spec: + replicas: {{ .Values.nem_voltha_kpi_exporter_replicas }} + template: + metadata: + labels: + app: kpi-exporter + release: {{ .Release.Name }} + spec: + containers: + - name: kpi-exporter + image: "{{ .Values.global.registry }}{{ .Values.images.voltha_kpi_exporter.repository }}:{{ tpl .Values.images.voltha_kpi_exporter.tag . }}" + imagePullPolicy: "{{ .Values.images.voltha_kpi_exporter.pullPolicy }}" + args: ["-broker={{ .Values.args.voltha_kpi_broker }}"] + ports: + - containerPort: 8080 + port: 8080 + protocol: TCP diff --git a/helm-charts/nem-monitoring/templates/exporter-service.yaml b/helm-charts/nem-monitoring/templates/exporter-service.yaml new file mode 100644 index 0000000..f5fcee2 --- /dev/null +++ b/helm-charts/nem-monitoring/templates/exporter-service.yaml @@ -0,0 +1,30 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: kpi-exporter + labels: + release: {{ .Release.Name }} +spec: + type: NodePort + ports: + - port: 8080 + targetPort: 8080 + nodePort: {{ .Values.nem_voltha_kpi_exporter_nodePort }} + protocol: TCP + selector: + app: "kpi-exporter" diff --git a/helm-charts/nem-monitoring/templates/grafana-dashboard-kb8s-configmap.yaml b/helm-charts/nem-monitoring/templates/grafana-dashboard-kb8s-configmap.yaml new file mode 100644 index 0000000..3334c51 --- /dev/null +++ b/helm-charts/nem-monitoring/templates/grafana-dashboard-kb8s-configmap.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-kb8s + labels: + grafana_dashboard: "1" +data: + kb8s.json: | +{{ .Files.Get "grafana-dashboards/kb8s-app-metrics.json" | indent 4 }} \ No newline at end of file diff --git a/helm-charts/nem-monitoring/templates/grafana-dashboard-node-exporter.yaml b/helm-charts/nem-monitoring/templates/grafana-dashboard-node-exporter.yaml new file mode 100644 index 0000000..684f7e3 --- /dev/null +++ b/helm-charts/nem-monitoring/templates/grafana-dashboard-node-exporter.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-node-exporter + labels: + grafana_dashboard: "1" +data: + xos.json: | +{{ .Files.Get "grafana-dashboards/node-exporter.json" | indent 4 }} diff --git a/helm-charts/nem-monitoring/templates/grafana-dashboard-onos-configmap.yaml b/helm-charts/nem-monitoring/templates/grafana-dashboard-onos-configmap.yaml new file mode 100644 index 0000000..25d270e --- /dev/null +++ b/helm-charts/nem-monitoring/templates/grafana-dashboard-onos-configmap.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-onos + labels: + grafana_dashboard: "1" +data: + onos.json: | +{{ .Files.Get "grafana-dashboards/onos-kpi.json" | indent 4 }} \ No newline at end of file diff --git a/helm-charts/nem-monitoring/templates/grafana-dashboard-voltha-configmap.yaml b/helm-charts/nem-monitoring/templates/grafana-dashboard-voltha-configmap.yaml new file mode 100644 index 0000000..efbb0dd --- /dev/null +++ b/helm-charts/nem-monitoring/templates/grafana-dashboard-voltha-configmap.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-voltha + labels: + grafana_dashboard: "1" +data: + voltha.json: | +{{ .Files.Get "grafana-dashboards/voltha-kpi.json" | indent 4 }} \ No newline at end of file diff --git a/helm-charts/nem-monitoring/templates/grafana-dashboard-xos-configmap.yaml b/helm-charts/nem-monitoring/templates/grafana-dashboard-xos-configmap.yaml new file mode 100644 index 0000000..13b99ef --- /dev/null +++ b/helm-charts/nem-monitoring/templates/grafana-dashboard-xos-configmap.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-xos + labels: + grafana_dashboard: "1" +data: + xos.json: | +{{ .Files.Get "grafana-dashboards/xos.json" | indent 4 }} \ No newline at end of file diff --git a/helm-charts/nem-monitoring/values.yaml b/helm-charts/nem-monitoring/values.yaml new file mode 100644 index 0000000..a41343b --- /dev/null +++ b/helm-charts/nem-monitoring/values.yaml @@ -0,0 +1,232 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +global: + registry: '' + +images: + voltha_kpi_exporter: + repository: 'opencord/kafka-topic-exporter' + tag: '1.1.2' + pullPolicy: 'Always' + +nem_voltha_kpi_exporter_nodePort: 31080 +nem_voltha_kpi_exporter_replicas: 2 + +args: + voltha_kpi_broker: cord-kafka:9092 + +prometheus: + alertmanager: + persistentVolume: + enabled: false + nodeExporter: + service: + clusterIP: "" + server: + persistentVolume: + enabled: false + service: + type: NodePort + nodePort: 31301 + serverFiles: + alerts: {} + rules: {} + + prometheus.yml: + rule_files: + - /etc/config/rules + - /etc/config/alerts + + scrape_configs: + # voltha KPI + - job_name: 'voltha-kpi' + metrics_path: /metrics + scrape_interval: 15s + static_configs: + - targets: + - kpi-exporter:8080 + + # XOS-Core + - job_name: 'xos-core' + metrics_path: /metrics + scrape_interval: 15s + static_configs: + - targets: + - xos-core-prometheus:8000 + + # NodeExporter + - job_name: 'node-exporter' + metrics_path: /metrics + scrape_interval: 15s + static_configs: + - targets: + - nem-monitoring-prometheus-node-exporter:9100 + + # KB8s monitoring jobs + - job_name: prometheus + static_configs: + - targets: + - localhost:9090 + - job_name: 'kubernetes-apiservers' + kubernetes_sd_configs: + - role: endpoints + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + insecure_skip_verify: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + relabel_configs: + - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] + action: keep + regex: default;kubernetes;https + - job_name: 'kubernetes-nodes' + # Default to scraping over https. If required, just disable this or change to + # `http`. + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + insecure_skip_verify: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - target_label: __address__ + replacement: kubernetes.default.svc:443 + - source_labels: [__meta_kubernetes_node_name] + regex: (.+) + target_label: __metrics_path__ + replacement: /api/v1/nodes/${1}/proxy/metrics + - job_name: 'kubernetes-nodes-cadvisor' + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + insecure_skip_verify: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - target_label: __address__ + replacement: kubernetes.default.svc:443 + - source_labels: [__meta_kubernetes_node_name] + regex: (.+) + target_label: __metrics_path__ + replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor + - job_name: 'kubernetes-service-endpoints' + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] + action: keep + regex: true + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] + action: replace + target_label: __scheme__ + regex: (https?) + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] + action: replace + target_label: __address__ + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_service_name] + action: replace + target_label: kubernetes_name + - job_name: 'prometheus-pushgateway' + honor_labels: true + kubernetes_sd_configs: + - role: service + relabel_configs: + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe] + action: keep + regex: pushgateway + - job_name: 'kubernetes-services' + metrics_path: /probe + params: + module: [http_2xx] + kubernetes_sd_configs: + - role: service + relabel_configs: + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe] + action: keep + regex: true + - source_labels: [__address__] + target_label: __param_target + - target_label: __address__ + replacement: blackbox + - source_labels: [__param_target] + target_label: instance + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_service_name] + target_label: kubernetes_name + - job_name: 'kubernetes-pods' + kubernetes_sd_configs: + - role: pod + relabel_configs: + - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] + action: keep + regex: true + - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] + action: replace + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_pod_name] + action: replace + target_label: kubernetes_pod_name + +grafana: + adminUser: admin + adminPassword: strongpassword + service: + type: NodePort + nodePort: 31300 + sidecar: + dashboards: + enabled: true + label: grafana_dashboard + datasources: + datasources.yaml: + apiVersion: 1 + datasources: + - name: Prometheus + type: prometheus + url: http://nem-monitoring-prometheus-server.default.svc.cluster.local + access: proxy + isDefault: true diff --git a/helm-charts/onos-progran/.helmignore b/helm-charts/onos-progran/.helmignore new file mode 100644 index 0000000..c13e3c8 --- /dev/null +++ b/helm-charts/onos-progran/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj \ No newline at end of file diff --git a/helm-charts/onos-progran/Chart.yaml b/helm-charts/onos-progran/Chart.yaml new file mode 100644 index 0000000..9699169 --- /dev/null +++ b/helm-charts/onos-progran/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: onos-progran +description: ONOS with progran APP +version: 1.2.4 +icon: https://guide.opencord.org/logos/onos.svg +appVersion: 0.1.8 + diff --git a/helm-charts/onos-progran/templates/_helpers.tpl b/helm-charts/onos-progran/templates/_helpers.tpl new file mode 100644 index 0000000..372e3c9 --- /dev/null +++ b/helm-charts/onos-progran/templates/_helpers.tpl @@ -0,0 +1,111 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "onos.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 "onos.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "onos.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "onos.logCfg" -}} +################################################################################ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# +################################################################################ + +# Root logger +log4j.rootLogger=INFO, out, json, osgi:*, stdout +log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer + +# CONSOLE appender not used by default +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n + +# File appender +log4j.appender.out=org.apache.log4j.RollingFileAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n +log4j.appender.out.file=${karaf.data}/log/karaf.log +log4j.appender.out.append=true +log4j.appender.out.maxFileSize=10MB +log4j.appender.out.maxBackupIndex=10 + +# JSON-ish appender (doesn't handle quotes in fields correctly) +# docs: https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html +log4j.appender.json=org.apache.log4j.RollingFileAppender +log4j.appender.json.layout=org.apache.log4j.PatternLayout +log4j.appender.json.layout.ConversionPattern={"@timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}","levelname":"%p","threadName":"%t","category":"%c{1}","bundle.id":"%X{bundle.id}","bundle.name":"%X{bundle.name}","bundle.version":"%X{bundle.version}","message":"%m"}%n +log4j.appender.json.file=${karaf.data}/log/karaf_json.log +log4j.appender.json.append=true +log4j.appender.json.maxFileSize=10MB +log4j.appender.json.maxBackupIndex=10 + +# Sift appender - one logfile per bundle ID +log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender +log4j.appender.sift.key=bundle.name +log4j.appender.sift.default=karaf +log4j.appender.sift.appender=org.apache.log4j.FileAppender +log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout +log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n +log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log +log4j.appender.sift.appender.append=true + +# Application logs +{{ .Values.application_logs }} + +{{- end -}} + diff --git a/helm-charts/onos-progran/templates/onos-progran-configmap.yaml b/helm-charts/onos-progran/templates/onos-progran-configmap.yaml new file mode 100644 index 0000000..d83ecc8 --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: onos-progran +data: + logCfg: | +{{ include "onos.logCfg" . | indent 4 }} diff --git a/helm-charts/onos-progran/templates/onos-progran-debugger-service.yaml b/helm-charts/onos-progran/templates/onos-progran-debugger-service.yaml new file mode 100644 index 0000000..f3cce87 --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-debugger-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-debugger + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.debuggerServiceType }} + ports: + - name: debugger +{{ toYaml .Values.services.debugger | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-deployment.yaml b/helm-charts/onos-progran/templates/onos-progran-deployment.yaml new file mode 100644 index 0000000..9e30bce --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-deployment.yaml @@ -0,0 +1,140 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "onos.fullname" . }} + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.xos_service_label }} + xos_service: {{ .Values.xos_service_label }} +{{- end }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} +{{- if .Values.xos_service_label }} + xos_service: {{ .Values.xos_service_label }} +{{- end }} + spec: + serviceAccount: {{ .Values.serviceAccountName }} + serviceAccountName: {{ .Values.serviceAccountName }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.global.registry }}{{ .Values.images.onos.repository }}:{{ tpl .Values.images.onos.tag . }}" + imagePullPolicy: {{ .Values.images.onos.pullPolicy }} + command: ["./root/files/onos-1.7.0.cemturker/bin/onos-service", "server", "debug"] + env: +{{ toYaml .Values.onos_env | indent 12 }} + ports: + - name: ovsdb + containerPort: {{ .Values.services.ovsdb.port }} + - name: openflow + containerPort: {{ .Values.services.openflow.port }} + - name: ssh + containerPort: {{ .Values.services.ssh.port }} + - name: ui + containerPort: {{ .Values.services.ui.port }} + - name: cluster + containerPort: {{ .Values.services.cluster.port }} + - name: debugger + containerPort: {{ .Values.services.debugger.port }} + - name: port22 + containerPort: {{ .Values.services.port22.port }} + - name: port9876 + containerPort: {{ .Values.services.port9876.port }} + - name: port4010 + containerPort: {{ .Values.services.port4010.port }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: node-key + mountPath: /root/vtn + readOnly: true + - name: onos-logs-cfg + mountPath: /root/onos/apache-karaf-3.0.8/etc/org.ops4j.pax.logging.cfg + subPath: org.ops4j.pax.logging.cfg + - name: onos-logs + mountPath: /root/onos/apache-karaf-3.0.8/data/log +{{- if .Values.log_agent.enabled }} + - name: {{ .Chart.Name }}-log-agent + image: "{{ .Values.global.registry }}{{ .Values.images.log_agent.repository }}:{{ .Values.images.log_agent.tag }}" + imagePullPolicy: {{ .Values.images.log_agent.pullPolicy }} + args: [ "-c", "/conf/filebeat.yml", "-e" ] + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - name: onos-logs + mountPath: /onos_logs + - name: log-agent-configmap-volume + mountPath: /conf +{{- end }} + volumes: + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + - name: onos-logs-cfg + configMap: + name: onos-progran + items: + - key: logCfg + path: org.ops4j.pax.logging.cfg + - name: onos-logs + emptyDir: {} +{{- if .Values.log_agent.enabled }} + - name: log-agent-configmap-volume + configMap: + name: log-agent-configmap + items: + - key: config + path: filebeat.yml +{{- end }} +{{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.log_agent.enabled }} +{{- include "onos.log-agent-configmap" . }} +{{- end }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-log-agent-configmap.yaml b/helm-charts/onos-progran/templates/onos-progran-log-agent-configmap.yaml new file mode 100644 index 0000000..e94bf33 --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-log-agent-configmap.yaml @@ -0,0 +1,52 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} +{{- define "onos.log-agent-configmap" }} +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: log-agent-configmap +data: + config: | + --- + # filebeat configuration for ONOS + filebeat.inputs: + - type: log + paths: + - "/onos_logs/karaf_json.log" + + fields_under_root: true + + json.keys_under_root: true + json.add_error_key: true + json.overwrite_keys: true + json.message_key: "message" + + multiline.pattern: '^[[:space:]]' + multiline.negate: false + multiline.match: after + + # remove unneeded fields + processors: + - drop_fields: + fields: ["host", "prospector", "input"] + + output.kafka: + hosts: {{ .Values.log_agent.kafka_brokers | toJson }} + topic: 'onos.log' + key: '%{[bundle.name]}' + +{{- end }} diff --git a/helm-charts/onos-progran/templates/onos-progran-openflow-service.yaml b/helm-charts/onos-progran/templates/onos-progran-openflow-service.yaml new file mode 100644 index 0000000..1328acc --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-openflow-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-openflow + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.openflowServiceType }} + ports: + - name: openflow +{{ toYaml .Values.services.openflow | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-ovsdb-service.yaml b/helm-charts/onos-progran/templates/onos-progran-ovsdb-service.yaml new file mode 100644 index 0000000..52c5c86 --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-ovsdb-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-ovsdb + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.ovsdbServiceType }} + ports: + - name: ovsdb +{{ toYaml .Values.services.ovsdb | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-port22-service.yaml b/helm-charts/onos-progran/templates/onos-progran-port22-service.yaml new file mode 100644 index 0000000..a99fbda --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-port22-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-progran-port22 + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.progranPort22ServiceType }} + ports: + - name: port22 +{{ toYaml .Values.services.port22 | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-port4010-service.yaml b/helm-charts/onos-progran/templates/onos-progran-port4010-service.yaml new file mode 100644 index 0000000..6547b7c --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-port4010-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-progran-port4010 + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.progranPort4010ServiceType }} + ports: + - name: port4010 +{{ toYaml .Values.services.port4010 | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-port9876-service.yaml b/helm-charts/onos-progran/templates/onos-progran-port9876-service.yaml new file mode 100644 index 0000000..5eadee3 --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-port9876-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-progran-port9876 + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.progranPort9876ServiceType }} + ports: + - name: port9876 +{{ toYaml .Values.services.port9876 | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-ssh-service.yaml b/helm-charts/onos-progran/templates/onos-progran-ssh-service.yaml new file mode 100644 index 0000000..1af1e16 --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-ssh-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-ssh + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.sshServiceType }} + ports: + - name: ssh +{{ toYaml .Values.services.ssh | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/templates/onos-progran-ui-service.yaml b/helm-charts/onos-progran/templates/onos-progran-ui-service.yaml new file mode 100644 index 0000000..fd6274e --- /dev/null +++ b/helm-charts/onos-progran/templates/onos-progran-ui-service.yaml @@ -0,0 +1,33 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-ui + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.uiServiceType }} + ports: + - name: ui +{{ toYaml .Values.services.ui | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + diff --git a/helm-charts/onos-progran/values.yaml b/helm-charts/onos-progran/values.yaml new file mode 100644 index 0000000..7b9f813 --- /dev/null +++ b/helm-charts/onos-progran/values.yaml @@ -0,0 +1,113 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for ONOS +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +images: + onos: + repository: 'muluder/prograncontrollermcord' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + # keep in sync with: https://github.com/helm/charts/blob/master/stable/filebeat/values.yaml + log_agent: + repository: docker.elastic.co/beats/filebeat-oss + tag: 6.4.2 + pullPolicy: IfNotPresent + +global: + registry: '' + +log_agent: + enabled: True + kafka_brokers: ['cord-kafka:9092'] + +nameOverride: '' +fullnameOverride: '' + +xos_service_label: ONOS + +namespace: default +serviceAccountName: default + +services: + openflowServiceType: NodePort + openflow: + port: 6653 + nodePort: 31654 + + sshServiceType: NodePort + ssh: + port: 8101 + nodePort: 30116 + + uiServiceType: NodePort + ui: + port: 8181 + nodePort: 30121 + + debuggerServiceType: NodePort + debugger: + port: 5005 + nodePort: 30556 + + progranPort22ServiceType: NodePort + port22: + port: 22 + nodePort: 30022 + + progranPort9876ServiceType: NodePort + port9876: + port: 9876 + nodePort: 30876 + + progranPort4010ServiceType: NodePort + port4010: + port: 4010 + nodePort: 30410 + + ovsdbServiceType: ClusterIP + ovsdb: + port: 6640 + + cluster: + port: 9876 + +onos_env: +- name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP +- name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace +- name: ONOS_APPS + value: "drivers,openflow-base,progran" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +application_logs: '' + diff --git a/helm-charts/onos/.helmignore b/helm-charts/onos/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/onos/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/onos/Chart.yaml b/helm-charts/onos/Chart.yaml new file mode 100644 index 0000000..2d674f1 --- /dev/null +++ b/helm-charts/onos/Chart.yaml @@ -0,0 +1,20 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: onos +description: Open Network Operating System +version: 1.1.0 +icon: https://guide.opencord.org/logos/onos.svg +appVersion: 1.13.5 diff --git a/helm-charts/onos/templates/_helpers.tpl b/helm-charts/onos/templates/_helpers.tpl new file mode 100644 index 0000000..1dab05a --- /dev/null +++ b/helm-charts/onos/templates/_helpers.tpl @@ -0,0 +1,110 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "onos.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 "onos.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "onos.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "onos.logCfg" -}} +################################################################################ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# +################################################################################ + +# Root logger +log4j.rootLogger=INFO, out, json, osgi:*, stdout +log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer + +# CONSOLE appender not used by default +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n + +# File appender +log4j.appender.out=org.apache.log4j.RollingFileAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n +log4j.appender.out.file=${karaf.data}/log/karaf.log +log4j.appender.out.append=true +log4j.appender.out.maxFileSize=10MB +log4j.appender.out.maxBackupIndex=10 + +# JSON-ish appender (doesn't handle quotes in fields correctly) +# docs: https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html +log4j.appender.json=org.apache.log4j.RollingFileAppender +log4j.appender.json.layout=org.apache.log4j.PatternLayout +log4j.appender.json.layout.ConversionPattern={"@timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}","levelname":"%p","threadName":"%t","category":"%c{1}","bundle.id":"%X{bundle.id}","bundle.name":"%X{bundle.name}","bundle.version":"%X{bundle.version}","message":"%m"}%n +log4j.appender.json.file=${karaf.data}/log/karaf_json.log +log4j.appender.json.append=true +log4j.appender.json.maxFileSize=10MB +log4j.appender.json.maxBackupIndex=10 + +# Sift appender - one logfile per bundle ID +log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender +log4j.appender.sift.key=bundle.name +log4j.appender.sift.default=karaf +log4j.appender.sift.appender=org.apache.log4j.FileAppender +log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout +log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n +log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log +log4j.appender.sift.appender.append=true + +# Application logs +{{ .Values.application_logs }} + +{{- end -}} diff --git a/helm-charts/onos/templates/configmap.yaml b/helm-charts/onos/templates/configmap.yaml new file mode 100644 index 0000000..0aaec49 --- /dev/null +++ b/helm-charts/onos/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: onos +data: + logCfg: | +{{ include "onos.logCfg" . | indent 4 }} \ No newline at end of file diff --git a/helm-charts/onos/templates/debugger-service.yaml b/helm-charts/onos/templates/debugger-service.yaml new file mode 100644 index 0000000..79f266b --- /dev/null +++ b/helm-charts/onos/templates/debugger-service.yaml @@ -0,0 +1,32 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-debugger + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.debuggerServiceType }} + ports: + - name: debugger +{{ toYaml .Values.services.debugger | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} diff --git a/helm-charts/onos/templates/deployment.yaml b/helm-charts/onos/templates/deployment.yaml new file mode 100644 index 0000000..f463c1d --- /dev/null +++ b/helm-charts/onos/templates/deployment.yaml @@ -0,0 +1,133 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "onos.fullname" . }} + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.xos_service_label }} + xos_service: {{ .Values.xos_service_label }} +{{- end }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} +{{- if .Values.xos_service_label }} + xos_service: {{ .Values.xos_service_label }} +{{- end }} + spec: + serviceAccount: {{ .Values.serviceAccountName }} + serviceAccountName: {{ .Values.serviceAccountName }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.global.registry }}{{ .Values.images.onos.repository }}:{{ tpl .Values.images.onos.tag . }}" + imagePullPolicy: {{ .Values.images.onos.pullPolicy }} + command: ["./bin/onos-service", "server", "debug"] + env: +{{ toYaml .Values.onos_env | indent 12 }} + ports: + - name: ovsdb + containerPort: {{ .Values.services.ovsdb.port }} + - name: openflow + containerPort: {{ .Values.services.openflow.port }} + - name: ssh + containerPort: {{ .Values.services.ssh.port }} + - name: ui + containerPort: {{ .Values.services.ui.port }} + - name: cluster + containerPort: {{ .Values.services.cluster.port }} + - name: debugger + containerPort: {{ .Values.services.debugger.port }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: node-key + mountPath: /root/vtn + readOnly: true + - name: onos-logs-cfg + mountPath: /root/onos/apache-karaf-3.0.8/etc/org.ops4j.pax.logging.cfg + subPath: org.ops4j.pax.logging.cfg + - name: onos-logs + mountPath: /root/onos/apache-karaf-3.0.8/data/log +{{- if .Values.log_agent.enabled }} + - name: {{ .Chart.Name }}-log-agent + image: "{{ .Values.global.registry }}{{ .Values.images.log_agent.repository }}:{{ .Values.images.log_agent.tag }}" + imagePullPolicy: {{ .Values.images.log_agent.pullPolicy }} + args: [ "-c", "/conf/filebeat.yml", "-e" ] + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - name: onos-logs + mountPath: /onos_logs + - name: log-agent-configmap-volume + mountPath: /conf +{{- end }} + volumes: + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + - name: onos-logs-cfg + configMap: + name: onos + items: + - key: logCfg + path: org.ops4j.pax.logging.cfg + - name: onos-logs + emptyDir: {} +{{- if .Values.log_agent.enabled }} + - name: log-agent-configmap-volume + configMap: + name: log-agent-configmap + items: + - key: config + path: filebeat.yml +{{- end }} +{{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.log_agent.enabled }} +{{- include "onos.log-agent-configmap" . }} +{{- end }} diff --git a/helm-charts/onos/templates/log-agent-configmap.yaml b/helm-charts/onos/templates/log-agent-configmap.yaml new file mode 100644 index 0000000..44e2763 --- /dev/null +++ b/helm-charts/onos/templates/log-agent-configmap.yaml @@ -0,0 +1,53 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} +{{- define "onos.log-agent-configmap" }} +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: log-agent-configmap +data: + config: | + --- + # filebeat configuration for ONOS + filebeat.inputs: + - type: log + paths: + - "/onos_logs/karaf_json.log" + + fields_under_root: true + + json.keys_under_root: true + json.add_error_key: true + json.overwrite_keys: true + json.message_key: "message" + + multiline.pattern: '^[[:space:]]' + multiline.negate: false + multiline.match: after + + # remove unneeded fields + processors: + - drop_fields: + fields: ["host", "prospector", "input"] + + output.kafka: + hosts: {{ .Values.log_agent.kafka_brokers | toJson }} + topic: 'onos.log' + key: '%{[bundle.name]}' + +{{- end }} + diff --git a/helm-charts/onos/templates/openflow-service.yaml b/helm-charts/onos/templates/openflow-service.yaml new file mode 100644 index 0000000..05fadeb --- /dev/null +++ b/helm-charts/onos/templates/openflow-service.yaml @@ -0,0 +1,32 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-openflow + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.openflowServiceType }} + ports: + - name: openflow +{{ toYaml .Values.services.openflow | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} diff --git a/helm-charts/onos/templates/ovsdb-service.yaml b/helm-charts/onos/templates/ovsdb-service.yaml new file mode 100644 index 0000000..f0760fe --- /dev/null +++ b/helm-charts/onos/templates/ovsdb-service.yaml @@ -0,0 +1,32 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-ovsdb + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.ovsdbServiceType }} + ports: + - name: ovsdb +{{ toYaml .Values.services.ovsdb | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} diff --git a/helm-charts/onos/templates/ssh-service.yaml b/helm-charts/onos/templates/ssh-service.yaml new file mode 100644 index 0000000..bf0b8a0 --- /dev/null +++ b/helm-charts/onos/templates/ssh-service.yaml @@ -0,0 +1,32 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-ssh + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.sshServiceType }} + ports: + - name: ssh +{{ toYaml .Values.services.ssh | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} diff --git a/helm-charts/onos/templates/ui-service.yaml b/helm-charts/onos/templates/ui-service.yaml new file mode 100644 index 0000000..4c05f4d --- /dev/null +++ b/helm-charts/onos/templates/ui-service.yaml @@ -0,0 +1,32 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "onos.fullname" . }}-ui + namespace: {{ .Values.namespace }} + labels: + app: {{ template "onos.name" . }} + chart: {{ template "onos.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.services.uiServiceType }} + ports: + - name: ui +{{ toYaml .Values.services.ui | indent 4 }} + selector: + app: {{ template "onos.name" . }} + release: {{ .Release.Name }} diff --git a/helm-charts/onos/values.yaml b/helm-charts/onos/values.yaml new file mode 100644 index 0000000..9ab6274 --- /dev/null +++ b/helm-charts/onos/values.yaml @@ -0,0 +1,97 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for ONOS +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +images: + onos: + repository: 'onosproject/onos' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + # keep in sync with: https://github.com/helm/charts/blob/master/stable/filebeat/values.yaml + log_agent: + repository: docker.elastic.co/beats/filebeat-oss + tag: 6.4.2 + pullPolicy: IfNotPresent + +global: + registry: '' + +log_agent: + enabled: True + kafka_brokers: ['cord-kafka:9092'] + +nameOverride: '' +fullnameOverride: '' + +xos_service_label: ONOS + +namespace: default +serviceAccountName: default + +services: + openflowServiceType: NodePort + openflow: + port: 6653 + nodePort: 31653 + + sshServiceType: NodePort + ssh: + port: 8101 + nodePort: 30115 + + uiServiceType: NodePort + ui: + port: 8181 + nodePort: 30120 + + debuggerServiceType: NodePort + debugger: + port: 5005 + nodePort: 30555 + + ovsdbServiceType: ClusterIP + ovsdb: + port: 6640 + + cluster: + port: 9876 + +onos_env: +- name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP +- name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace +- name: ONOS_APPS + value: "drivers,openflow-base" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +application_logs: '' diff --git a/helm-charts/ovsplugin/Chart.yaml b/helm-charts/ovsplugin/Chart.yaml new file mode 100644 index 0000000..8b1c559 --- /dev/null +++ b/helm-charts/ovsplugin/Chart.yaml @@ -0,0 +1,17 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: ovsplugin +version: 1.0.0 diff --git a/helm-charts/ovsplugin/templates/_helpers.tpl b/helm-charts/ovsplugin/templates/_helpers.tpl new file mode 100644 index 0000000..f1d1dc2 --- /dev/null +++ b/helm-charts/ovsplugin/templates/_helpers.tpl @@ -0,0 +1,25 @@ + +{{- /* + Copyright 2017-present Open Networking Foundation + + 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. + */ -}} + +{{- define "ovsplugin.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +version: {{ .Chart.Version }} +release: {{ .Release.Name }} +{{- end }} +{{- define "ovsplugin.full_name" -}} +{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 -}} +{{- end -}} diff --git a/helm-charts/ovsplugin/templates/ovs-cni.yaml b/helm-charts/ovsplugin/templates/ovs-cni.yaml new file mode 100644 index 0000000..26ed2ba --- /dev/null +++ b/helm-charts/ovsplugin/templates/ovs-cni.yaml @@ -0,0 +1,206 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: ovs-plugin +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - update + - patch + - apiGroups: + - "alpha.network.k8s.io" + resources: + - logicalnetworks + verbs: + - get + - update + - patch + - apiGroups: + - "alpha.network.k8s.io" + resources: + - physicalnetworks + verbs: + - get + - update + - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - apiGroups: + - "admissionregistration.k8s.io" + resources: + - validatingwebhookconfigurations + verbs: + - get + - update + - create + - delete + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: ovs-plugin +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ovs-plugin +subjects: +- kind: ServiceAccount + name: ovs-plugin + namespace: kube-system +- kind: Group + name: system:authenticated + apiGroup: rbac.authorization.k8s.io + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: ovs-plugin + namespace: kube-system + +--- +# This ConfigMap can be used to configure a self-hosted OVS installation. +kind: ConfigMap +apiVersion: v1 +metadata: + name: ovs-config + namespace: kube-system +data: + # The CNI network configuration to install on each node. + cni_ovs_network_config: |- + { + "name":"ovs", + "cniVersion":"0.3.1", + "type":"ovs", + "ovsBridge":"br0", + "vtepIPs":[ + "10.245.2.2", + "10.245.2.3" + ], + "isDefaultGateway": true, + "ipMasq": true, + "ipam":{ + "type":"host-local", + "subnet":"10.244.0.0/16", + "rangeStart":"10.244.1.10", + "rangeEnd":"10.244.1.150", + "routes":[ + { + "dst":"0.0.0.0/0" + } + ], + "gateway":"10.244.1.1" + } + } + + cni_ovsctlip_network_config: |- + { + "name":"ovs-ctl", + "cniVersion":"0.3.1", + "type":"ovs", + "ovsBridge":"br0", + "ipam":{ + "type":"centralip", + "ipType": "cluster", + "network":"10.245.0.0/16", + "etcdURL": "https://127.0.0.1:2379", + "etcdCertFile": "/etc/ovs/certs/cert.crt", + "etcdKeyFile": "/etc/ovs/certs/key.pem", + "etcdTrustedCAFileFile": "/etc/ovs/certs/ca_cert.crt" + } + } + + +--- +# Install OVS CNI plugin and conf on each slave node. +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + name: ovs-plugin + namespace: kube-system + labels: + k8s-app: ovs +spec: + selector: + matchLabels: + k8s-app: ovs + template: + metadata: + labels: + k8s-app: ovs + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + scheduler.alpha.kubernetes.io/tolerations: | + [ + { + "key": "dedicated", + "value": "master", + "effect": "NoSchedule" + }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + } + ] + spec: + hostNetwork: true + hostPID: true + serviceAccountName: ovs-plugin + containers: + # Create a container with place_conf.sh that + # Installs required 30-ovs.conf and 35-ovsctlip.conf on slave node. + - name: install-cni + image: {{ .Values.pull_docker_registry }}{{ .Values.images.ovs_plugin.repository }}:{{ .Values.images.ovs_plugin.tag }} + imagePullPolicy: {{ .Values.images.ovs_plugin.pullPolicy }} + command: ["/place_conf.sh"] + env: + - name: CNI_OVS_NETWORK_CONFIG + valueFrom: + configMapKeyRef: + name: ovs-config + key: cni_ovs_network_config + - name: CNI_OVSCTLIP_NETWORK_CONFIG + valueFrom: + configMapKeyRef: + name: ovs-config + key: cni_ovsctlip_network_config + - name: KUBERNETES_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - mountPath: /host/opt/cni/bin + name: cni-bin-dir + - mountPath: /host/etc/cni/net.d + name: cni-net-dir + volumes: + - name: cni-bin-dir + hostPath: + path: /opt/cni/bin + - name: cni-net-dir + hostPath: + path: /etc/cni/net.d diff --git a/helm-charts/ovsplugin/values.yaml b/helm-charts/ovsplugin/values.yaml new file mode 100644 index 0000000..813a19a --- /dev/null +++ b/helm-charts/ovsplugin/values.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +pull_docker_registry: + +images: + ovs_plugin: + repository: gopinatht/ovs-plugin-installer + tag: 'latest' + pullPolicy: 'Always' + diff --git a/helm-charts/ponnet/Chart.yaml b/helm-charts/ponnet/Chart.yaml new file mode 100644 index 0000000..d9ee22f --- /dev/null +++ b/helm-charts/ponnet/Chart.yaml @@ -0,0 +1,17 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: ponnet +version: 1.0.0 diff --git a/helm-charts/ponnet/templates/_helpers.tpl b/helm-charts/ponnet/templates/_helpers.tpl new file mode 100644 index 0000000..7ce70d5 --- /dev/null +++ b/helm-charts/ponnet/templates/_helpers.tpl @@ -0,0 +1,25 @@ + +{{- /* + Copyright 2017-present Open Networking Foundation + + 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. + */ -}} + +{{- define "ponnet.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +version: {{ .Chart.Version }} +release: {{ .Release.Name }} +{{- end }} +{{- define "ponnet.full_name" -}} +{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 -}} +{{- end -}} diff --git a/helm-charts/ponnet/templates/genie-cni-1.8.yaml b/helm-charts/ponnet/templates/genie-cni-1.8.yaml new file mode 100644 index 0000000..0fbf50a --- /dev/null +++ b/helm-charts/ponnet/templates/genie-cni-1.8.yaml @@ -0,0 +1,328 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: genie-plugin +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - update + - patch + - apiGroups: + - "alpha.network.k8s.io" + resources: + - logicalnetworks + verbs: + - get + - update + - patch + - apiGroups: + - "alpha.network.k8s.io" + resources: + - physicalnetworks + verbs: + - get + - update + - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - apiGroups: + - "admissionregistration.k8s.io" + resources: + - validatingwebhookconfigurations + verbs: + - get + - update + - create + - delete + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: genie-policy +rules: + - apiGroups: + - "" + resources: + - networkpolicies + verbs: + - get + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: genie-plugin +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: genie-plugin +subjects: +- kind: ServiceAccount + name: genie-plugin + namespace: kube-system +- kind: ServiceAccount + name: genie-policy + namespace: kube-system +- kind: Group + name: system:authenticated + apiGroup: rbac.authorization.k8s.io + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: genie-policy +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: genie-policy +subjects: +- kind: ServiceAccount + name: genie-policy + namespace: kube-system + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: genie-plugin + namespace: kube-system + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: genie-policy + namespace: kube-system + +--- +# This ConfigMap can be used to configure a self-hosted CNI-Genie installation. +kind: ConfigMap +apiVersion: v1 +metadata: + name: genie-config + namespace: kube-system +data: + # The CNI network configuration to install on each node. + cni_genie_network_config: |- + { + "name": "k8s-pod-network", + "type": "genie", + "log_level": "info", + "datastore_type": "kubernetes", + "default_plugin": "calico", + "hostname": "__KUBERNETES_NODE_NAME__", + "policy": { + "type": "k8s", + "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__" + }, + "kubernetes": { + "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__", + "kubeconfig": "/etc/cni/net.d/genie-kubeconfig" + }, + "romana_root": "http://__ROMANA_SERVICE_HOST__:__ROMANA_SERVICE_PORT__", + "segment_label_name": "romanaSegment" + } + +--- +# Install CNI-Genie plugin on each slave node. +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + name: genie-plugin + namespace: kube-system + labels: + k8s-app: genie +spec: + selector: + matchLabels: + k8s-app: genie + template: + metadata: + labels: + k8s-app: genie + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + scheduler.alpha.kubernetes.io/tolerations: | + [ + { + "key": "dedicated", + "value": "master", + "effect": "NoSchedule" + }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + } + ] + spec: + hostNetwork: true + hostPID: true + serviceAccountName: genie-plugin + containers: + # Create a container with install.sh that + # Installs required 00-genie.conf and genie binary + # on slave node. + - name: install-cni + image: quay.io/huawei-cni-genie/genie-plugin:latest + imagePullPolicy: Always + command: ["/launch.sh"] + env: + - name: CNI_NETWORK_CONFIG + valueFrom: + configMapKeyRef: + name: genie-config + key: cni_genie_network_config + - name: KUBERNETES_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - mountPath: /host/opt/cni/bin + name: cni-bin-dir + - mountPath: /host/etc/cni/net.d + name: cni-net-dir + volumes: + - name: cni-bin-dir + hostPath: + path: /opt/cni/bin + - name: cni-net-dir + hostPath: + path: /etc/cni/net.d + +--- +# Genie network admission controller daemonset configuration +# Genie network admission controller pods will run only in master nodes +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: genie-network-admission-controller + namespace: kube-system +spec: + template: + metadata: + labels: + role: genie-network-admission-controller + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + - key: CriticalAddonsOnly + operator: Exists + nodeSelector: + node-role.kubernetes.io/master: "" + hostNetwork: true + serviceAccountName: genie-plugin + containers: + - name: genie-network-admission-controller + image: quay.io/huawei-cni-genie/genie-admission-controller:latest + imagePullPolicy: Always + ports: + - containerPort: 8000 +--- +# Genie network admission controller service +apiVersion: v1 +kind: Service +metadata: + labels: + role: genie-network-admission-controller + name: genie-network-admission-controller + namespace: kube-system +spec: + ports: + - port: 443 + targetPort: 8000 + selector: + role: genie-network-admission-controller + +--- +# Daemonset configuration for geine network policy +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + name: genie-policy-controller + namespace: kube-system + labels: + k8s-app: genie-policy +spec: + selector: + matchLabels: + k8s-app: genie-policy + template: + metadata: + labels: + k8s-app: genie-policy + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + scheduler.alpha.kubernetes.io/tolerations: | + [ + { + "key": "dedicated", + "value": "master", + "effect": "NoSchedule" + }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + } + ] + spec: + hostNetwork: true + hostPID: true + serviceAccountName: genie-policy + containers: + - name: policy-engine + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + image: quay.io/huawei-cni-genie/genie-policy-controller:latest + imagePullPolicy: Always + command: + - /genie-policy + args: + - -kubeconfig=/etc/kubernetes/admin.conf + - -logtostderr=true + securityContext: + privileged: true + volumeMounts: + - name: etc-kubernetes + mountPath: /etc/kubernetes + readOnly: true + volumes: + - name: etc-kubernetes + hostPath: + path: /etc/kubernetes \ No newline at end of file diff --git a/helm-charts/ponnet/templates/pon0-cni.yaml b/helm-charts/ponnet/templates/pon0-cni.yaml new file mode 100644 index 0000000..8b23d5a --- /dev/null +++ b/helm-charts/ponnet/templates/pon0-cni.yaml @@ -0,0 +1,200 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: pon0-plugin +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - update + - patch + - apiGroups: + - "alpha.network.k8s.io" + resources: + - logicalnetworks + verbs: + - get + - update + - patch + - apiGroups: + - "alpha.network.k8s.io" + resources: + - physicalnetworks + verbs: + - get + - update + - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - apiGroups: + - "admissionregistration.k8s.io" + resources: + - validatingwebhookconfigurations + verbs: + - get + - update + - create + - delete + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: pon0-plugin +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: pon0-plugin +subjects: +- kind: ServiceAccount + name: pon0-plugin + namespace: kube-system +- kind: Group + name: system:authenticated + apiGroup: rbac.authorization.k8s.io + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: pon0-plugin + namespace: kube-system + +--- +# This ConfigMap can be used to configure a self-hosted Pon0 installation. +kind: ConfigMap +apiVersion: v1 +metadata: + name: pon0-config + namespace: kube-system +data: + # The CNI network configuration to install on each node. + cni_pon0_network_config: |- + { + "name": "pon0", + "type": "bridge", + "bridge": "pon0", + "isGateway": false, + "ipMask": false, + "ipam": { + "type": "host-local", + "subnet": "10.22.0.0/16" + } + } + +--- +# This ConfigMap can be used to configure a self-hosted Pon0 installation. +kind: ConfigMap +apiVersion: v1 +metadata: + name: pon1-config + namespace: kube-system +data: + # The CNI network configuration to install on each node. + cni_pon1_network_config: |- + { + "name": "pon1", + "type": "bridge", + "bridge": "pon1", + "isGateway": true, + "ipMask": true, + "ipam": { + "type": "host-local", + "subnet": "10.23.0.0/16", + "routes": [ + { "dst": "0.0.0.0/0" } + ] + } + } + +--- +# Install Pon0 CNI conf on each slave node. +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + name: pon0-plugin + namespace: kube-system + labels: + k8s-app: pon0 +spec: + selector: + matchLabels: + k8s-app: pon0 + template: + metadata: + labels: + k8s-app: pon0 + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + scheduler.alpha.kubernetes.io/tolerations: | + [ + { + "key": "dedicated", + "value": "master", + "effect": "NoSchedule" + }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + } + ] + spec: + hostNetwork: true + hostPID: true + serviceAccountName: pon0-plugin + containers: + # Create a container with place_conf.sh that + # Installs required 20-pon0.conf on slave node. + - name: install-cni + image: {{ .Values.pull_docker_registry }}{{ .Values.images.pon0.repository }}:{{ .Values.images.pon0.tag }} + imagePullPolicy: {{ .Values.images.pon0.pullPolicy }} + command: ["/place_conf.sh"] + env: + - name: CNI_NETWORK_CONFIG + valueFrom: + configMapKeyRef: + name: pon0-config + key: cni_pon0_network_config + - name: CNI_PON1_NETWORK_CONFIG + valueFrom: + configMapKeyRef: + name: pon1-config + key: cni_pon1_network_config + - name: KUBERNETES_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - mountPath: /host/opt/cni/bin + name: cni-bin-dir + - mountPath: /host/etc/cni/net.d + name: cni-net-dir + volumes: + - name: cni-bin-dir + hostPath: + path: /opt/cni/bin + - name: cni-net-dir + hostPath: + path: /etc/cni/net.d diff --git a/helm-charts/ponnet/values.yaml b/helm-charts/ponnet/values.yaml new file mode 100644 index 0000000..402fb1f --- /dev/null +++ b/helm-charts/ponnet/values.yaml @@ -0,0 +1,25 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +pull_docker_registry: + +images: + pon0: + repository: gopinatht/pon0-network + tag: 'latest' + pullPolicy: 'Always' + +global: + namespace: voltha diff --git a/helm-charts/ponsimv2/Chart.yaml b/helm-charts/ponsimv2/Chart.yaml new file mode 100644 index 0000000..296e6a1 --- /dev/null +++ b/helm-charts/ponsimv2/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: ponsimv2 +description: PON Simulator +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.3 + +# VOLTHA version +appVersion: 1.6.0 diff --git a/helm-charts/ponsimv2/templates/_helpers.tpl b/helm-charts/ponsimv2/templates/_helpers.tpl new file mode 100644 index 0000000..95813d3 --- /dev/null +++ b/helm-charts/ponsimv2/templates/_helpers.tpl @@ -0,0 +1,25 @@ + +{{- /* + Copyright 2017-present Open Networking Foundation + + 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. + */ -}} + +{{- define "ponsimv2.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +version: {{ .Chart.Version }} +release: {{ .Release.Name }} +{{- end }} +{{- define "ponsimv2.full_name" -}} +{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 -}} +{{- end -}} diff --git a/helm-charts/ponsimv2/templates/olt.yaml b/helm-charts/ponsimv2/templates/olt.yaml new file mode 100644 index 0000000..8026068 --- /dev/null +++ b/helm-charts/ponsimv2/templates/olt.yaml @@ -0,0 +1,73 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: olt + namespace: {{ .Values.global.namespace }} + labels: + name: olt +spec: + ports: + - name: grpc + port: 50060 + targetPort: 50060 + selector: + app: olt +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: olt + namespace: {{ .Values.global.namespace }} +spec: + replicas: 1 + template: + metadata: + labels: + app: olt + annotations: + cni: "calico,pon1" + spec: + containers: + - name: olt + image: "{{ .Values.global.registry }}{{ .Values.images.olt.repository }}:{{ tpl .Values.images.olt.tag . }}" + imagePullPolicy: {{ .Values.images.olt.pullPolicy }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + args: + - "/app/ponsim" + - "-device_type" + - "OLT" + - "-onus" + - "4" + - "-internal_if" + - "eth1" + - "-external_if" + - "eth1" + - "-vcore_endpoint" + - "vcore" + - "-promiscuous" + ports: + - containerPort: 50060 + name: grpc-port diff --git a/helm-charts/ponsimv2/templates/onu.yaml b/helm-charts/ponsimv2/templates/onu.yaml new file mode 100644 index 0000000..6179fc2 --- /dev/null +++ b/helm-charts/ponsimv2/templates/onu.yaml @@ -0,0 +1,86 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: onu + namespace: {{ .Values.global.namespace }} + labels: + name: onu +spec: + ports: + - name: grpc + port: 50061 + targetPort: 50061 + selector: + app: onu +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: onu + namespace: {{ .Values.global.namespace }} +spec: + replicas: 1 + template: + metadata: + labels: + app: onu + annotations: + cni: "calico,pon0" + spec: + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - rg + topologyKey: kubernetes.io/hostname + containers: + - name: onu + image: "{{ .Values.global.registry }}{{ .Values.images.onu.repository }}:{{ tpl .Values.images.onu.tag . }}" + imagePullPolicy: {{ .Values.images.onu.pullPolicy }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + args: + - "/app/ponsim" + - "-device_type" + - "ONU" + - "-parent_addr" + - "olt" + - "-grpc_port" + - "50061" + - "-internal_if" + - "eth0" + - "-external_if" + - "eth1" + - "-promiscuous" + + ports: + - containerPort: 50061 + name: grpc-port diff --git a/helm-charts/ponsimv2/templates/rg.yaml b/helm-charts/ponsimv2/templates/rg.yaml new file mode 100644 index 0000000..e96c59c --- /dev/null +++ b/helm-charts/ponsimv2/templates/rg.yaml @@ -0,0 +1,57 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: rg + namespace: {{ .Values.global.namespace }} +spec: + replicas: 1 + template: + metadata: + labels: + app: rg + annotations: + cni: "pon0" + spec: + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - onu + topologyKey: kubernetes.io/hostname + containers: + - name: rg + image: "{{ .Values.global.registry }}{{ .Values.images.rg.repository }}:{{ tpl .Values.images.rg.tag . }}" + imagePullPolicy: {{ .Values.images.rg.pullPolicy }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + command: [ "/bin/bash", "-c", "trap : TERM INT; sleep infinity & wait" ] + securityContext: + privileged: true diff --git a/helm-charts/ponsimv2/values.yaml b/helm-charts/ponsimv2/values.yaml new file mode 100644 index 0000000..9fa6c0a --- /dev/null +++ b/helm-charts/ponsimv2/values.yaml @@ -0,0 +1,36 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +images: + olt: + repository: 'voltha/voltha-ponsim' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + onu: + repository: 'voltha/voltha-ponsim' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + rg: + repository: 'voltha/voltha-tester' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + pon0: + repository: 'gopinatht/pon0-network' + tag: 'latest' + pullPolicy: 'Always' + +global: + namespace: voltha + registry: '' diff --git a/helm-charts/sadis-server/Chart.yaml b/helm-charts/sadis-server/Chart.yaml new file mode 100644 index 0000000..c4a24db --- /dev/null +++ b/helm-charts/sadis-server/Chart.yaml @@ -0,0 +1,17 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: sadis-server +version: 1.0.2 +appVersion: 1.0.1 diff --git a/helm-charts/sadis-server/templates/sadis-deployment.yaml b/helm-charts/sadis-server/templates/sadis-deployment.yaml new file mode 100644 index 0000000..e7de3c8 --- /dev/null +++ b/helm-charts/sadis-server/templates/sadis-deployment.yaml @@ -0,0 +1,48 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 + +kind: Deployment +metadata: + name: sadis-server + labels: + app: sadis-server +spec: + replicas: 1 + template: + metadata: + labels: + app: sadis-server + release: {{ .Release.Name }} + spec: + containers: + - name: sadis-server + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 8000 + port: 8000 + protocol: TCP + env: + - name: SADISSERVER_PORT + value: "8000" + - name: SADISSERVER_USERNAME + value: "{{ .Values.xosAdminUser }}" + - name: SADISSERVER_PASSWORD + value: "{{ .Values.xosAdminPassword }}" + - name: SADISSERVER_XOS + value: xos-chameleon:9101 + - name: SADISSERVER_KAFKABROKER + value: "{{ .Values.kafkaBroker }}" diff --git a/helm-charts/sadis-server/templates/sadis-service.yaml b/helm-charts/sadis-server/templates/sadis-service.yaml new file mode 100644 index 0000000..e31b932 --- /dev/null +++ b/helm-charts/sadis-server/templates/sadis-service.yaml @@ -0,0 +1,30 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. +apiVersion: v1 + +kind: Service +metadata: + name: "sadis-service" + labels: + app: "sadis-server" +spec: + type: ClusterIP + ports: + - name: sadis-service + port: 8000 + targetPort: 8000 + protocol: TCP + selector: + app: sadis-server + release: {{ .Release.Name }} diff --git a/helm-charts/sadis-server/values.yaml b/helm-charts/sadis-server/values.yaml new file mode 100644 index 0000000..0aa4cb6 --- /dev/null +++ b/helm-charts/sadis-server/values.yaml @@ -0,0 +1,26 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + + +image: + repository: 'opencord/sadis-server' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +kafkaBroker: "cord-kafka:9092" diff --git a/helm-charts/scripts/helmlint.sh b/helm-charts/scripts/helmlint.sh new file mode 100755 index 0000000..aabdca0 --- /dev/null +++ b/helm-charts/scripts/helmlint.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# helmlint.sh +# run `helm lint` on all helm charts that are found + +set +e -o pipefail + +# verify that we have helm installed +command -v helm >/dev/null 2>&1 || { echo "helm not found, please install it" >&2; exit 1; } + +echo "helmlint.sh, using helm version: $(helm version -c --short)" + +fail_lint=0 + +# when not running under Jenkins, use current dir as workspace +WORKSPACE=${WORKSPACE:-.} + +# cleanup repos if `clean` option passed as parameter +if [ "$1" = "clean" ] +then + echo "Removing dependent charts" + find "${WORKSPACE}" -name 'charts' -exec rm -rf {} \; +fi + +while IFS= read -r -d '' chart +do + chartdir=$(dirname "${chart}") + + # only update dependencies for profiles + if [[ $chartdir =~ xos-profiles || $chartdir =~ workflows ]] && [ -f "${chartdir}/requirements.yaml" ] + then + helm dependency update "${chartdir}" + fi + + # lint with values.yaml if it exists + if [ -f "${chartdir}/values.yaml" ]; then + helm lint --strict --values "${chartdir}/values.yaml" "${chartdir}" + else + helm lint --strict "${chartdir}" + fi + + rc=$? + if [[ $rc != 0 ]]; then + fail_lint=1 + fi +done < <(find "${WORKSPACE}" -name Chart.yaml -print0) + +if [[ $fail_lint != 0 ]]; then + exit 1 +fi + +exit 0 diff --git a/helm-charts/scripts/helmrepo.sh b/helm-charts/scripts/helmrepo.sh new file mode 100755 index 0000000..3820124 --- /dev/null +++ b/helm-charts/scripts/helmrepo.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# helmrepo.sh +# creates a helm repo for publishing on guide website + +set -eu -o pipefail + +# when not running under Jenkins, use current dir as workspace +WORKSPACE=${WORKSPACE:-.} + +REPO_DIR="${REPO_DIR:-chart_repo}" + +GERRIT_BRANCH="${GERRIT_BRANCH:-$(git symbolic-ref --short HEAD)}" +PUBLISH_URL="${PUBLISH_URL:-https://charts.opencord.org}" + +mkdir -p "${REPO_DIR}" + +while IFS= read -r -d '' chart +do + chartdir=$(dirname "${chart}") + + echo "Adding ${chartdir}" + + helm package --dependency-update --destination "${REPO_DIR}" "${chartdir}" + +done < <(find "${WORKSPACE}" -name Chart.yaml -print0) + +echo "Generating repo index" + +helm repo index "${REPO_DIR}" --url "${PUBLISH_URL}" --merge index.yaml + +echo "Finished, chart repo generated: ${REPO_DIR}" + diff --git a/helm-charts/scripts/pki/.gitignore b/helm-charts/scripts/pki/.gitignore new file mode 100644 index 0000000..3c69f2e --- /dev/null +++ b/helm-charts/scripts/pki/.gitignore @@ -0,0 +1,4 @@ +*.pem +*.key +*.csr +root_ca diff --git a/helm-charts/scripts/pki/Makefile b/helm-charts/scripts/pki/Makefile new file mode 100644 index 0000000..2b27fe7 --- /dev/null +++ b/helm-charts/scripts/pki/Makefile @@ -0,0 +1,97 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# XOS pki makefile +# Configuration is also given in xos-pki.cnf + +SHELL = bash -eu -o pipefail + +# parameters +KEY_SIZE ?= 2048 +EXPIRATION_DAYS ?= 366 +OPENSSL_CNF ?= xos-pki.cnf + +# utility/validation targets + +help: + @echo "Usually you want to run 'make all_certs'" + +validate: + openssl verify -verbose -purpose sslserver -CAfile xos-CA.pem xos-core.crt + +printca: xos-CA.pem + openssl x509 -in $< -text -noout + +printkey: xos-core.key + openssl rsa -in $< -check + +printcsr: xos-core.csr + openssl req -in $< -text -noout -verify + +printpem: xos-core.pem + openssl x509 -in $< -text -noout + +all_certs: xos-core.pem + +clean: + rm -rf root_ca *.pem *.key *.csr + +# CA creation +root_ca: + mkdir -p root_ca/private root_ca/newcerts + chmod 700 root_ca/private + echo 1000 > root_ca/serial + touch root_ca/index.txt + +root_ca/private/ca_root_phrase: root_ca + @echo "TestingXOSRootCAPassPhrase" > root_ca/private/ca_root_phrase + +root_ca/private/ca_key.pem: root_ca root_ca/private/ca_root_phrase + @echo "## Creating CA private key, $@" + openssl genrsa -aes256 \ + -passout file:root_ca/private/ca_root_phrase \ + -out root_ca/private/ca_key.pem $(KEY_SIZE) + +xos-CA.pem: xos-pki.cnf root_ca/private/ca_key.pem + @echo "## Creating self-signed CA public key: $@" + openssl req -config $(OPENSSL_CNF) \ + -new -x509 -days $(EXPIRATION_DAYS) -sha256 \ + -extensions v3_ca \ + -key root_ca/private/ca_key.pem \ + -passin file:root_ca/private/ca_root_phrase \ + -subj "/C=US/ST=California/L=Menlo Park/O=ONF/OU=Testing Only/CN=CORD Test Root CA" \ + -out $@ + +# cert creation +.PRECIOUS: %.key %.csr # don't delete intermediate files + +%.key: + @echo "## Creating server private key: $@" + openssl genrsa -out $@ $(KEY_SIZE) + +%.csr: %.key $(OPENSSL_CNF) + @echo "## Creating signing request $@ from $<" + openssl req -config $(OPENSSL_CNF) \ + -new -sha256 -key $< \ + -subj "/C=US/ST=California/L=Menlo Park/O=ONF/OU=Testing Only/CN=$*" \ + -out $@ + +%.pem: %.csr xos-CA.pem $(OPENSSL_CNF) + @echo "## Signing voltha.csr to create signed public key: voltha.crt" + openssl ca -config $(OPENSSL_CNF) \ + -batch -days $(EXPIRATION_DAYS) -md sha256 \ + -passin file:root_ca/private/ca_root_phrase \ + -extensions $* \ + -in $< \ + -out $@ diff --git a/helm-charts/scripts/pki/README.md b/helm-charts/scripts/pki/README.md new file mode 100644 index 0000000..2aeaea1 --- /dev/null +++ b/helm-charts/scripts/pki/README.md @@ -0,0 +1,12 @@ +# XOS Certificate Generation + +To create certificates for use with XOS, you'll need a system with `make` and +the `openssl` cli tool. + +Most frequently you'll want to run `make all_certs`, then copy the files: + +- `xos-CA.pem` +- `xos-core.pem` +- `xos-core.key` + +into the `xos-core/pki` chart directory. diff --git a/helm-charts/scripts/pki/xos-pki.cnf b/helm-charts/scripts/pki/xos-pki.cnf new file mode 100644 index 0000000..5349054 --- /dev/null +++ b/helm-charts/scripts/pki/xos-pki.cnf @@ -0,0 +1,88 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +[ ca ] +default_ca = CA_default + +[ CA_default ] +dir = ./root_ca +certs = $dir/certs +crl_dir = $dir/crl +new_certs_dir = $dir/newcerts +database = $dir/index.txt +serial = $dir/serial + +private_key = $dir/private/ca_key.pem +certificate = xos-CA.pem + +# Make new requests easier to sign - allow two subjects with same name +# (Or revoke the old certificate first.) +unique_subject = no +preserve = no + +# for CA that signs client certs +policy = policy_loose + +[ policy_loose ] +# Allow the to sign more types of certs +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ req ] +default_bits = 2048 +default_days = 366 +default_md = sha256 +distinguished_name = req_distinguished_name +string_mask = utf8only +x509_extensions = v3_ca + +[ req_distinguished_name ] +# See . +countryName = Country Name (2 letter code) +stateOrProvinceName = State or Province Name +localityName = Locality Name +0.organizationName = Organization Name +organizationalUnitName = Organizational Unit Name +commonName = Common Name +emailAddress = Email Address + +# Defaults DN +countryName_default = US +stateOrProvinceName_default = California +localityName_default = Menlo Park +0.organizationName_default = ONF +organizationalUnitName_default = Testing Only +commonName = CORD Testing +emailAddress_default = do-not-reply@opencord.org + +[ v3_ca ] +# Extensions for a typical CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:TRUE +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +# Extensions for certificates (`man x509v3_config`). +[ xos-core ] +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +basicConstraints = CA:FALSE +keyUsage = critical, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth +subjectAltName = 'DNS:xos-core, DNS:xos-core.default, DNS:xos-core.default.svc.cluster.local' diff --git a/helm-charts/scripts/wait_for_jobs.sh b/helm-charts/scripts/wait_for_jobs.sh new file mode 100755 index 0000000..5b48870 --- /dev/null +++ b/helm-charts/scripts/wait_for_jobs.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# wait_for_jobs.sh +# waits for all kubernetes jobs to complete before exiting +# inspired by similar scripts in Kolla-Kubernetes and Openstack Helm + +set -eu -o pipefail +fail_wfj=0 + +# Set these to configure maximum timeout, and interval for checks +JOBS_TIMEOUT=${JOBS_TIMEOUT:-600} +CHECK_INTERVAL=${CHECK_INTERVAL:-5} +KUBECTL_ARGS=${KUBECTL_ARGS:-} + +# calculate timeout time +START_TIME=$(date +%s) +END_TIME=$((START_TIME + JOBS_TIMEOUT)) + +echo "wait_for_jobs.sh - Waiting up to ${JOBS_TIMEOUT} seconds for all Kubernetes jobs to complete" +echo "Number printed is number of currently active jobs" + +prev_job_count=0 + +while true; do + NOW=$(date +%s) + + # handle timeout without completion + if [ "$NOW" -gt "$END_TIME" ] + then + echo "Jobs didn't complete before timeout of ${JOBS_TIMEOUT} seconds" + fail_wfj=1 + break + fi + + # get list of active jobs, and count of them + # jsonpath is picky about string vs comparison quoting, so have to have: + # shellcheck disable=SC2026,SC2086 + active_jobs=$(kubectl get jobs $KUBECTL_ARGS -o=jsonpath='{range .items[?(@.status.active=='1')]}{.metadata.name}{"\n"}{end}') + + # this always is 1 or more, as echo leaves a newline in the output which wc + # counts as a line + active_job_count=$(echo -n "${active_jobs}" | wc -l) + + # if no jobs active, print runtime and break + if [ -z "$active_jobs" ] + then + runtime=$((NOW - START_TIME)) + echo "" + echo "All jobs completed in $runtime seconds" + break + fi + + # deal with changes in number of jobs + if [ "$active_job_count" -ne "$prev_job_count" ] + then + echo "" + echo "Number of active jobs changed - current jobs:" + echo "$active_jobs" + fi + prev_job_count=$active_job_count + + # print number of remaining jobs every $CHECK_INTERVAL + echo -n "$active_job_count " + sleep "$CHECK_INTERVAL" +done + +echo "" +echo "Job Status - Name | Start Time | Completion Time" +# shellcheck disable=SC2086 +kubectl get jobs $KUBECTL_ARGS -o=jsonpath='{range .items[*]}{.metadata.name}{"\t| "}{.status.startTime}{" | "}{.status.completionTime}{"\n"}{end}' + +exit ${fail_wfj} diff --git a/helm-charts/scripts/wait_for_pods.sh b/helm-charts/scripts/wait_for_pods.sh new file mode 100755 index 0000000..6d58010 --- /dev/null +++ b/helm-charts/scripts/wait_for_pods.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# wait_for_pods.sh +# waits for all kubernetes pods to complete before exiting, optionally only +# pods in a specific namespace passed as first argument +# inspired by similar scripts in Kolla-Kubernetes and Openstack Helm + +set -e -o pipefail +fail_wfp=0 + +# Set these to configure maximum timeout, and interval for checks +PODS_TIMEOUT=${PODS_TIMEOUT:-600} +CHECK_INTERVAL=${CHECK_INTERVAL:-5} +KUBECTL_ARGS=${KUBECTL_ARGS:-} + +# use namespace if passed as first arg, or "all" for all namespaces +if [ ! -z "$1" ] +then + if [[ "$1" == "all" ]] + then + KUBECTL_ARGS+=" --all-namespaces" + else + KUBECTL_ARGS+=" --namespace=$1" + fi +fi +set -u + +# calculate timeout time +START_TIME=$(date +%s) +END_TIME=$((START_TIME + PODS_TIMEOUT)) + +echo "wait_for_pods.sh - Waiting up to ${PODS_TIMEOUT} seconds for all Kubernetes pods to be ready" +echo "Number printed is number of jobs/pods/containers waiting to be ready" + +prev_total_unready=0 + +while true; do + NOW=$(date +%s) + + # handle timeout without completion + if [ "$NOW" -gt "$END_TIME" ] + then + echo "Pods/Containers/Jobs not ready before timeout of ${PODS_TIMEOUT} seconds" + fail_wfp=1 + break + fi + + # get list of uncompleted items with jsonpath, then count them with wc + # ref: https://kubernetes.io/docs/reference/kubectl/jsonpath/ + # jsonpath is picky about string vs comparison quoting, so may need to + # disable SC2026 for these lines. SC2086 allows for multiple args. + + # shellcheck disable=SC2026,SC2086 + pending_pods=$(kubectl get pods ${KUBECTL_ARGS} -o=jsonpath='{range .items[?(@.status.phase=="Pending")]}{.metadata.name}{"\n"}{end}') + # check for empty string before counting lines, echo adds a newline + if [ -z "$pending_pods" ]; then + pending_pod_count=0 + else + pending_pod_count=$( echo "$pending_pods" | wc -l) + fi + + # shellcheck disable=SC2026,SC2086 + unready_containers=$(kubectl get pods ${KUBECTL_ARGS} -o=jsonpath='{range .items[?(@.status.phase=="Running")]}{range .status.containerStatuses[?(@.ready==false)]}{.name}: {.ready}{"\n"}{end}{end}') + if [ -z "$unready_containers" ]; then + unready_container_count=0 + else + unready_container_count=$(echo "$unready_containers" | wc -l) + fi + + # shellcheck disable=SC2026,SC2086 + active_jobs=$(kubectl get jobs $KUBECTL_ARGS -o=jsonpath='{range .items[?(@.status.active=='1')]}{.metadata.name}{"\n"}{end}') + if [ -z "$active_jobs" ]; then + active_job_count=0 + else + active_job_count=$(echo "$active_jobs" | wc -l) + fi + + total_unready=$((pending_pod_count + unready_container_count + active_job_count)) + + # if everything is ready, print runtime and break + if [ "$total_unready" -eq 0 ] + then + runtime=$((NOW - START_TIME)) + echo "" + echo "All pods ready in $runtime seconds" + break + fi + + # deal with changes in number of jobs + if [ "$total_unready" -ne "$prev_total_unready" ] + then + echo "" + echo "Change in unready pods - Pending Pods: $pending_pod_count, Unready Containers: $unready_container_count, Active Jobs: $active_job_count" + fi + prev_total_unready=$total_unready + + # print number of unready pods every $CHECK_INTERVAL + echo -n "$total_unready " + sleep "$CHECK_INTERVAL" +done + +exit ${fail_wfp} diff --git a/helm-charts/scripts/yamllint.conf b/helm-charts/scripts/yamllint.conf new file mode 100644 index 0000000..a0e02ab --- /dev/null +++ b/helm-charts/scripts/yamllint.conf @@ -0,0 +1,13 @@ +--- +# yamllint.conf + +extends: default + +rules: + empty-lines: + max-end: 1 + line-length: + max: 120 + braces: + min-spaces-inside: 0 + max-spaces-inside: 1 diff --git a/helm-charts/storage/README.md b/helm-charts/storage/README.md new file mode 100644 index 0000000..3f2a426 --- /dev/null +++ b/helm-charts/storage/README.md @@ -0,0 +1,335 @@ +# CORD Storage charts + +These charts implement persistent storage that is within Kubernetes. + +See the Kubernetes documentation for background material on how persistent +storage works: + +- [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) +- [PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) + +Using persistent storage is optional during development, but should be +provisioned for and configured during production and realistic testing +scenarios. + +## Local Directory + +The `local-provisioner` chart creates +[local](https://kubernetes.io/docs/concepts/storage/volumes/#local) volumes on +specific nodes, from directories. As there are no enforced limits for volume +size and the node names are preconfigured, this chart is intended for use only +for development and testing. + +Multiple directories can be specified in the `volumes` list - an example is +given in the `values.yaml` file of the chart. + +The `StorageClass` created for all volumes is `local-directory`. + +There is an ansible script that automates the creation of directories on all +the kubernetes nodes. Make sure that the inventory name in ansible matches the +one given as `host` in the `volumes` list, then invoke with: + +```shell +ansible-playbook -i --extra-vars "helm_values_file:" local-directory-playbook.yaml +``` + +## Local Provisioner + +The `local-provisioner` chart provides a +[local](https://kubernetes.io/docs/concepts/storage/volumes/#local), +non-distributed `PersistentVolume` that is usable on one specific node. It +does this by running the k8s [external storage local volume +provisioner](https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume/helm/provisioner). + +This type of storage is useful for workloads that have their own intrinsic HA +or redundancy strategies, and only need storage on multiple nodes. + +This provisioner is not "dynamic" in the sense that that it can't create a new +`PersistentVolume` on demand from a storage pool, but the provisioner can +automatically create volumes as disks/partitions are mounted on the nodes. + +To create a new PV, a disk or partition on a node has to be formatted and +mounted in specific locations, after which the provisioner will automatically +create a `PersistentVolume` for the mount. As these volumes can't be split or +resized, care must be taken to ensure that the correct quantity, types, and +sizes of mounts are created for all the `PersistentVolumeClaim`'s required to +be bound for a specific workload. + +By default, two `StorageClasses` were created to differentiate between Hard +Disks and SSD's: + +- `local-hdd`, which offers PV's on volumes mounted in `/mnt/local-storage/hdd/*` +- `local-ssd`, which offers PV's on volumes mounted in `/mnt/local-storage/ssd/*` + +### Adding a new local volume on a node + +If you wanted to add a new volume a node, you'd physically install a new disk +in the system, then determine the device file it uses. Assuming that it's a +hard disk and the device file is `/dev/sdb`, you might partition, format, and +mount the disk like this: + +```shell +$ sudo parted -s /dev/sdb \ + mklabel gpt \ + mkpart primary ext4 1MiB 100% +$ sudo mkfs.ext4 /dev/sdb1 +$ echo "/dev/sdb1 /mnt/local-storage/hdd/sdb1 ext4 defaults 0 0" | sudo tee -a /etc/fstab +$ sudo mount /mnt/local-storage/hdd/sdb1 +``` + +Then check that the `PersistentVolume` is created by the `local-provisioner`: + +```shell +$ kubectl get pv +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE +local-pv-2bfa2c43 19Gi RWO Delete Available local-hdd 6h + +$ kubectl describe pv local-pv- +Name: local-pv-2bfa2c43 +Labels: +Annotations: pv.kubernetes.io/provisioned-by=local-volume-provisioner-node1-... +Finalizers: [kubernetes.io/pv-protection] +StorageClass: local-hdd +Status: Available +Claim: +Reclaim Policy: Delete +Access Modes: RWO +Capacity: 19Gi +Node Affinity: + Required Terms: + Term 0: kubernetes.io/hostname in [node1] +Message: +Source: + Type: LocalVolume (a persistent volume backed by local storage on a node) + Path: /mnt/local-storage/hdd/sdb1 +Events: +``` + +## Ceph deployed with Rook + +[Rook](https://rook.github.io/) provides an abstraction layer for Ceph and +other distributed persistent data storage systems. + +There are 3 Rook charts included with CORD: + +- `rook-operator`, which runs the volume provisioning portion of Rook (and is a + thin wrapper around the upstream [rook-ceph + chart](https://rook.github.io/docs/rook/v0.8/helm-operator.html) +- `rook-cluster`, which defines the Ceph cluster and creates these + `StorageClass` objects usable by other charts: + - `cord-ceph-rbd`, dynamically create `PersistentVolumes` when a + `PersistentVolumeClaim` is created. These volumes are only usable by a + single container at a time. + - `cord-cephfs`, a single shared filesystem which is mountable + `ReadWriteMulti` on multiple containers via `PersistentVolumeClaim`. It's + size is predetermined. +- `rook-tools`, which provides a toolbox container for troubleshooting problems + with Rook/Ceph + +To create persistent volumes, you will need to load the first 2 charts, with +the third only needed for troubleshooting and diagnostics. + +### Rook Node Prerequisties + +By default, all the nodes running k8s are expected to have a directory named +`/mnt/ceph` where the Ceph data is stored (the `cephDataDir` variable can be +used to change this path). + +In a production deployment, this would ideally be located on it's own block +storage device. + +There should be at least 3 nodes with storage available to provide data +redundancy. + +### Loading Rook Charts + +First, add the `rook-beta` repo to helm, then load the `rook-operator` chart +into the `rook-ceph-system` namespace: + +```shell +cd helm-charts/storage +helm repo add rook-beta https://charts.rook.io/beta +helm dep update rook-operator +helm install --namespace rook-ceph-system -n rook-operator rook-operator +``` + +Check that it's running (it will start the `rook-ceph-agent` and +`rook-discover` DaemonSets): + +```shell +$ kubectl -n rook-ceph-system get pods +NAME READY STATUS RESTARTS AGE +rook-ceph-agent-4c66b 1/1 Running 0 6m +rook-ceph-agent-dsdsr 1/1 Running 0 6m +rook-ceph-agent-gwjlk 1/1 Running 0 6m +rook-ceph-operator-687b7bb6ff-vzjsl 1/1 Running 0 7m +rook-discover-9f87r 1/1 Running 0 6m +rook-discover-lmhz9 1/1 Running 0 6m +rook-discover-mxsr5 1/1 Running 0 6m +``` + +Next, load the `rook-cluster` chart, which connects the storage on the nodes to +the Ceph pool, and the CephFS filesystem: + +```shell +helm install -n rook-cluster rook-cluster +``` + +Check that the cluster is running - this may take a few minutes, and look for the +`rook-ceph-mds-*` containers to start: + +```shell +$ kubectl -n rook-ceph get pods +NAME READY STATUS RESTARTS AGE +rook-ceph-mds-cord-ceph-filesystem-7564b648cf-4wxzn 1/1 Running 0 1m +rook-ceph-mds-cord-ceph-filesystem-7564b648cf-rcvnx 1/1 Running 0 1m +rook-ceph-mgr-a-75654fb698-zqj67 1/1 Running 0 5m +rook-ceph-mon0-v9d2t 1/1 Running 0 5m +rook-ceph-mon1-4sxgc 1/1 Running 0 5m +rook-ceph-mon2-6b6pj 1/1 Running 0 5m +rook-ceph-osd-id-0-85d887f76c-44w9d 1/1 Running 0 4m +rook-ceph-osd-id-1-866fb5c684-lmxfp 1/1 Running 0 4m +rook-ceph-osd-id-2-557dd69c5c-qdnmb 1/1 Running 0 4m +rook-ceph-osd-prepare-node1-bfzzm 0/1 Completed 0 4m +rook-ceph-osd-prepare-node2-dt4gx 0/1 Completed 0 4m +rook-ceph-osd-prepare-node3-t5fnn 0/1 Completed 0 4m + +$ kubectl -n rook-ceph get storageclass +NAME PROVISIONER AGE +cord-ceph-rbd ceph.rook.io/block 6m +cord-cephfs kubernetes.io/no-provisioner 6m + +$ kubectl -n rook-ceph get filesystems +NAME AGE +cord-ceph-filesystem 6m + +$ kubectl -n rook-ceph get pools +NAME AGE +cord-ceph-pool 6m + +$ kubectl -n rook-ceph get persistentvolume +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE +cord-cephfs-pv 20Gi RWX Retain Available cord-cephfs 7m +``` + +At this point you can create a `PersistentVolumeClaim` on `cord-ceph-rbd` and a +corresponding `PersistentVolume` will be created by the `rook-ceph-operator` +acting as a volume provisioner and bound to the PVC. + +Creating a `PeristentVolumeClaim` on `cord-cephfs` will mount the same CephFS +filesystem on every container that requests it. The CephFS PV implementation +currently isn't as mature as the Ceph RDB volumes, and may not remount properly +when used with a PVC. + +### Troubleshooting Rook + +Checking the `rook-ceph-operator` logs can be enlightening: + +```shell +kubectl -n rook-ceph-system logs -f rook-ceph-operator-... +``` + +The [Rook toolbox container](https://rook.io/docs/rook/v0.8/toolbox.html) has +been containerized as the `rook-tools` chart, and provides a variety of tools +for debugging Rook and Ceph. + +Load the `rook-tools` chart: + +```shell +helm install -n rook-tools rook-tools +``` + +Once the container is running (check with `kubectl -n rook-ceph get pods`), +exec into it to run a shell to access all tools: + +```shell +kubectl -n rook-ceph exec -it rook-ceph-tools bash +``` + +or run a one-off command: + +```shell +kubectl -n rook-ceph exec rook-ceph-tools -- ceph status +``` + +or mount the CephFS volume: + +```shell +kubectl -n rook-ceph exec -it rook-ceph-tools bash +mkdir /mnt/cephfs +mon_endpoints=$(grep mon_host /etc/ceph/ceph.conf | awk '{print $3}') +my_secret=$(grep key /etc/ceph/keyring | awk '{print $3}') +mount -t ceph -o name=admin,secret=$my_secret $mon_endpoints:/ /mnt/cephfs +ls /mnt/cephfs +``` + +### Cleaning up after Rook + +The `rook-operator` chart will leave a few `DaemonSet` behind after it's +removed. Clean these up using these commands: + +```shell +kubectl -n rook-ceph-system delete daemonset rook-ceph-agent +kubectl -n rook-ceph-system delete daemonset rook-discover +helm delete --purge rook-operator +``` + +If you have other charts that create `PersistentVolumeClaims`, you may need to +clean them up manually (for example, if you've changed the `StorageClass` they +use), list them with: + +```shell +kubectl --all-namespaces get pvc +``` + +Files may be left behind in the Ceph storage directory and/or Rook +configuration that need to be deleted before starting `rook-*` charts. If +you've used the `automation-tools/kubespray-installer` scripts to set up a +environment named `test`, you can delete all these files with the following +commands: + +```shell +cd cord/automation-tools/kubespray-installer +ansible -i inventories/test/inventory.cfg -b -m shell -a "rm -rf /var/lib/rook && rm -rf /mnt/ceph/*" all +``` + +The current upgrade process for Rook involves manual intervention and +inspection using the tools container. + +## Using Persistent Storage + +The general process for using persistent storage is to create a +[PersistentVolumeClaim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) +on the appropriate +[StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) +for the workload you're trying to run. + +### Example: XOS Database on a local directory + +For development and testing, it may be useful to persist the XOS database + +```shell +helm install -f examples/xos-db-local-dir.yaml -n xos-core xos-core +``` + +### Example: XOS Database on a Ceph RBD volume + +The XOS Database (Postgres) wants a volume that persists if a node goes down or +is taken out of service, not shared with other containers running Postgres, +thus the Ceph RBD volume is a reasonable choice to use with it. + +```shell +helm install -f examples/xos-db-ceph-rbd.yaml -n xos-core xos-core +``` + +### Example: Docker Registry on CephFS shared filesystem + +The Docker Registry wants a filesystem that is the shared across all +containers, so it's a suitable workload for the `cephfs` shared filesystem. + +There's an example values file available in `helm-charts/examples/registry-cephfs.yaml` + +```shell +helm install -f examples/registry-cephfs.yaml -n docker-registry stable/docker-registry +``` + diff --git a/helm-charts/storage/local-directory/Chart.yaml b/helm-charts/storage/local-directory/Chart.yaml new file mode 100644 index 0000000..d343bf9 --- /dev/null +++ b/helm-charts/storage/local-directory/Chart.yaml @@ -0,0 +1,17 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: local-directory +version: 0.1.0-dev0 diff --git a/helm-charts/storage/local-directory/local-directory-playbook.yaml b/helm-charts/storage/local-directory/local-directory-playbook.yaml new file mode 100644 index 0000000..0c03add --- /dev/null +++ b/helm-charts/storage/local-directory/local-directory-playbook.yaml @@ -0,0 +1,41 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# This playbook will create directories needed by the local-directories helm +# chart that will be turned into k8s PersistentVolumes +# +# For dev use only - use real volumes/disks in production + +- hosts: all + become: yes + + vars: + helm_values_file: ./values.yaml + + tasks: + - name: Read yaml from helm_values_file + set_fact: + helm_values: "{{ lookup('file', helm_values_file) | from_yaml }}" + + - name: Create directories on nodes + when: item.host == ansible_hostname + file: + path: "{{ item.directory }}" + state: directory + owner: root + group: root + mode: 0755 + with_items: "{{ helm_values.volumes }}" + diff --git a/helm-charts/storage/local-directory/templates/NOTES.txt b/helm-charts/storage/local-directory/templates/NOTES.txt new file mode 100644 index 0000000..7cf053a --- /dev/null +++ b/helm-charts/storage/local-directory/templates/NOTES.txt @@ -0,0 +1,9 @@ +A StorageClass was created: {{ .Values.storageClassName }} + +The following PersistentVolumes were created using directories on these nodes: + +# PV Name, Host, Size, Host Directory +{{- range $volume := .Values.volumes }} +{{ $volume.name }}, {{ $volume.host}}, {{ $volume.size }}, {{ $volume.directory }} +{{- end }} + diff --git a/helm-charts/storage/local-directory/templates/localdirs.yaml b/helm-charts/storage/local-directory/templates/localdirs.yaml new file mode 100644 index 0000000..04a9f51 --- /dev/null +++ b/helm-charts/storage/local-directory/templates/localdirs.yaml @@ -0,0 +1,46 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: {{ .Values.storageClassName }} +provisioner: kubernetes.io/no-provisioner +volumeBindingMode: WaitForFirstConsumer + +{{- range $volume := .Values.volumes }} +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: {{ $volume.name }} +spec: + capacity: + storage: {{ $volume.size }} + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: {{ $.Values.storageClassName }} + local: + path: {{ $volume.directory }} + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - {{ $volume.host }} +{{- end }} diff --git a/helm-charts/storage/local-directory/values.yaml b/helm-charts/storage/local-directory/values.yaml new file mode 100644 index 0000000..fbafd9b --- /dev/null +++ b/helm-charts/storage/local-directory/values.yaml @@ -0,0 +1,27 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +storageClassName: local-directory + +volumes: + - name: "small-pv" + size: "2Gi" + host: "node1" + directory: "/var/kubernetes_local_directories/small-pv" + - name: "large-pv" + size: "10Gi" + host: "node1" + directory: "/var/kubernetes_local_directories/large-pv" + diff --git a/helm-charts/storage/local-provisioner/Chart.yaml b/helm-charts/storage/local-provisioner/Chart.yaml new file mode 100644 index 0000000..d99ade5 --- /dev/null +++ b/helm-charts/storage/local-provisioner/Chart.yaml @@ -0,0 +1,29 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# NOTE: this Apache v2 licensed code originally came from: +# https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume/helm/provisioner +# at commit: fc25fd337b15a413b1162f76b59b2cac7ff39126 +# +# Minimal changes have been applied to align it with CORD/SEBA + +apiVersion: v1 +version: 2.0.0 +description: local provisioner chart +name: local-provisioner +keywords: + - storage + - local +engine: gotpl diff --git a/helm-charts/storage/local-provisioner/provisioner-namespace.yaml b/helm-charts/storage/local-provisioner/provisioner-namespace.yaml new file mode 100644 index 0000000..5923b16 --- /dev/null +++ b/helm-charts/storage/local-provisioner/provisioner-namespace.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +{{- if .Values.common.rbac }} +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.common.namespace }} +{{- end }} diff --git a/helm-charts/storage/local-provisioner/templates/00_provisioner_rbac.yaml b/helm-charts/storage/local-provisioner/templates/00_provisioner_rbac.yaml new file mode 100644 index 0000000..7ddedd9 --- /dev/null +++ b/helm-charts/storage/local-provisioner/templates/00_provisioner_rbac.yaml @@ -0,0 +1,101 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +{{- if .Values.common.rbac }} +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.common.namespace }} + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Values.daemonset.serviceAccount }} + namespace: {{ .Values.common.namespace }} + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: local-storage-provisioner-pv-binding + namespace: {{ .Values.common.namespace }} +subjects: +- kind: ServiceAccount + name: {{ .Values.daemonset.serviceAccount }} + namespace: {{ .Values.common.namespace }} +roleRef: + kind: ClusterRole + name: system:persistent-volume-provisioner + apiGroup: rbac.authorization.k8s.io + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: local-storage-provisioner-node-clusterrole + namespace: {{ .Values.common.namespace }} +rules: +- apiGroups: [""] + resources: ["nodes"] + verbs: ["get"] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: local-storage-provisioner-node-binding + namespace: {{ .Values.common.namespace }} +subjects: +- kind: ServiceAccount + name: {{ .Values.daemonset.serviceAccount }} + namespace: {{ .Values.common.namespace }} +roleRef: + kind: ClusterRole + name: local-storage-provisioner-node-clusterrole + apiGroup: rbac.authorization.k8s.io + +{{- if .Values.common.useJobForCleaning }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: local-storage-provisioner-jobs-role + namespace: {{ .Values.common.namespace }} +rules: +- apiGroups: + - 'batch' + resources: + - jobs + verbs: + - '*' + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: local-storage-provisioner-jobs-rolebinding + namespace: {{ .Values.common.namespace }} +subjects: +- kind: ServiceAccount + name: {{ .Values.daemonset.serviceAccount }} + namespace: {{ .Values.common.namespace }} +roleRef: + kind: Role + name: local-storage-provisioner + apiGroup: rbac.authorization.k8s.io + +{{- end }} # if .Values.common.useJobForCleaning +{{- end }} # if .Values.common.rbac diff --git a/helm-charts/storage/local-provisioner/templates/provisioner.yaml b/helm-charts/storage/local-provisioner/templates/provisioner.yaml new file mode 100644 index 0000000..1e15e3d --- /dev/null +++ b/helm-charts/storage/local-provisioner/templates/provisioner.yaml @@ -0,0 +1,133 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.common.configMapName }} + namespace: {{ .Values.common.namespace }} +data: +{{- if .Values.daemonset.nodeLabels }} + nodeLabelsForPV: | + {{- range $label := .Values.daemonset.nodeLabels }} + - {{$label}} + {{- end }} +{{- end }} +{{- if .Values.common.useAlphaAPI }} + useAlphaAPI: "true" +{{- end }} +{{- if .Values.common.useJobForCleaning }} + useJobForCleaning: "yes" +{{- end}} +{{- if .Values.common.minResyncPeriod }} + minResyncPeriod: {{ .Values.common.minResyncPeriod | quote }} +{{- end}} + storageClassMap: | + {{- range $classConfig := .Values.classes }} + {{ $classConfig.name }}: + hostDir: {{ $classConfig.hostDir }} + mountDir: {{ if $classConfig.mountDir }} {{- $classConfig.mountDir -}} {{ else }} {{- $classConfig.hostDir -}} {{ end }} + {{- if $classConfig.blockCleanerCommand }} + blockCleanerCommand: + {{- range $val := $classConfig.blockCleanerCommand }} + - "{{ $val -}}"{{- end}} + {{- end }} + {{- end }} +--- +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: {{ .Values.daemonset.name }} + namespace: {{ .Values.common.namespace }} + labels: + app: local-volume-provisioner +spec: + selector: + matchLabels: + app: local-volume-provisioner + template: + metadata: + labels: + app: local-volume-provisioner + spec: + serviceAccountName: {{.Values.daemonset.serviceAccount}} +{{- if .Values.daemonset.tolerations }} + tolerations: +{{ .Values.daemonset.tolerations | toYaml | trim | indent 8 }} +{{- end }} + containers: + - image: "{{ .Values.daemonset.image }}" + {{- if .Values.daemonset.imagePullPolicy }} + imagePullPolicy: {{ .Values.daemonset.imagePullPolicy | quote }} + {{- end }} + name: provisioner + securityContext: + privileged: true +{{- if .Values.daemonset.resources }} + resources: +{{ .Values.daemonset.resources | toYaml | trim | indent 12 }} +{{- end }} + env: + - name: MY_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: MY_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: JOB_CONTAINER_IMAGE + value: "{{ .Values.daemonset.image }}" + {{- if .Values.daemonset.kubeConfigEnv }} + - name: KUBECONFIG + value: {{.Values.daemonset.kubeConfigEnv}} + {{- end }} + volumeMounts: + - mountPath: /etc/provisioner/config + name: provisioner-config + readOnly: true + - mountPath: /dev + name: provisioner-dev + {{- range $classConfig := .Values.classes }} + - mountPath: {{ if $classConfig.mountDir }} {{- $classConfig.mountDir -}} {{ else }} {{- $classConfig.hostDir -}} {{ end }} + name: {{ $classConfig.name }} + mountPropagation: "HostToContainer" + {{- end }} + volumes: + - name: provisioner-config + configMap: + name: {{ .Values.common.configMapName }} + - name: provisioner-dev + hostPath: + path: /dev + {{- range $classConfig := .Values.classes }} + - name: {{ $classConfig.name }} + hostPath: + path: {{ $classConfig.hostDir }} + {{- end }} + +{{- range $val := .Values.classes }} +{{- if $val.storageClass }} +{{- $reclaimPolicy := $val.reclaimPolicy | default "Delete" }} +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ $val.name }} +provisioner: kubernetes.io/no-provisioner +volumeBindingMode: WaitForFirstConsumer +reclaimPolicy: {{ $reclaimPolicy }} +{{- end }} +{{- end }} diff --git a/helm-charts/storage/local-provisioner/values.yaml b/helm-charts/storage/local-provisioner/values.yaml new file mode 100644 index 0000000..a7e2883 --- /dev/null +++ b/helm-charts/storage/local-provisioner/values.yaml @@ -0,0 +1,133 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Common options. +common: + # Defines whether to generate service account and role bindings. + rbac: true + + # Defines the namespace where provisioner runs + namespace: "local-storage" + + # Beta PV.NodeAffinity field is used by default. If running against pre-1.10 + # k8s version, the `useAlphaAPI` flag must be enabled in the configMap. + useAlphaAPI: false + + # Provisioner clean volumes in process by default. If set to true, provisioner + # will use Jobs to clean. + useJobForCleaning: false + + # Resync period in reflectors will be random between minResyncPeriod and + # 2*minResyncPeriod. Default: 5m0s. + minResyncPeriod: "5m0s" + + # Defines the name of configmap used by Provisioner + configMapName: "local-provisioner-config" + +# Configure storage classes. +classes: + - name: "local-hdd" # hard disk volumes + + # Path on the host where local volumes of this storage class are mounted + # under. + hostDir: "/mnt/local-storage/hdd" + + # Optionally specify mount path of local volumes. By default, we use same + # path as hostDir in container. + mountDir: false + + blockCleanerCommand: + # Do a quick reset of the block device during its cleanup. + - "/scripts/quick_reset.sh" + # or use dd to zero out block dev in two iterations by uncommenting these lines + # - "/scripts/dd_zero.sh" + # - "2" + # or run shred utility for 2 iterations + # - "/scripts/shred.sh" + # - "2" + # or blkdiscard utility by uncommenting the line below. + # - "/scripts/blkdiscard.sh" + + # Uncomment to create storage class object with default configuration. + storageClass: true + + # Avaiable reclaim policies: Delete/Retain, defaults: Delete. + reclaimPolicy: "Delete" + + - name: "local-ssd" # solid state disk volumes + + # Path on the host where local volumes of this storage class are mounted + # under. + hostDir: "/mnt/local-storage/ssd" + + # Optionally specify mount path of local volumes. By default, we use same + # path as hostDir in container. + mountDir: false + + blockCleanerCommand: + # Do a quick reset of the block device during its cleanup. + - "/scripts/quick_reset.sh" + # or use dd to zero out block dev in two iterations by uncommenting these lines + # - "/scripts/dd_zero.sh" + # - "2" + # or run shred utility for 2 iterations + # - "/scripts/shred.sh" + # - "2" + # or blkdiscard utility by uncommenting the line below. + # - "/scripts/blkdiscard.sh" + + # Uncomment to create storage class object with default configuration. + storageClass: true + + # Avaiable reclaim policies: Delete/Retain, defaults: Delete. + reclaimPolicy: "Delete" + + +# Configure DaemonSet for provisioner. +daemonset: + + # Defines the name of a Provisioner + name: "local-volume-provisioner" + + # Defines Provisioner's image name including container registry. + image: "quay.io/external_storage/local-volume-provisioner:v2.1.0" + + # Defines Image download policy, see kubernetes documentation for available values. + imagePullPolicy: 'IfNotPresent' + + # Defines a name of the service account which Provisioner will use to communicate with API server. + serviceAccount: "local-storage-admin" + + # If configured KubeConfigEnv will (optionally) specify the location of kubeconfig file on the node. + # kubeConfigEnv: KUBECONFIG + kubeConfigEnv: false + + # List of node labels to be copied to the PVs created by the provisioner in a format: + # + # nodeLabels: + # - failure-domain.beta.kubernetes.io/zone + # - failure-domain.beta.kubernetes.io/region + nodeLabels: [] + + # If configured, tolerations will add a toleration field to the DaemonSet PodSpec. + # + # Node tolerations for local-volume-provisioner scheduling to nodes with taints. + # Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + tolerations: [] + + # If configured, resources will set the requests/limits field to the Daemonset PodSpec. + # Ref: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + resources: {} + diff --git a/helm-charts/storage/rook-cluster/Chart.yaml b/helm-charts/storage/rook-cluster/Chart.yaml new file mode 100644 index 0000000..0c80d0f --- /dev/null +++ b/helm-charts/storage/rook-cluster/Chart.yaml @@ -0,0 +1,18 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +description: Sets up Rook for Ceph storage in testing environments +name: rook-cluster +version: 0.1.0-dev0 diff --git a/helm-charts/storage/rook-cluster/templates/00_rook_rbac.yaml b/helm-charts/storage/rook-cluster/templates/00_rook_rbac.yaml new file mode 100644 index 0000000..9bb4fa6 --- /dev/null +++ b/helm-charts/storage/rook-cluster/templates/00_rook_rbac.yaml @@ -0,0 +1,74 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# For more information, see documentation: +# https://rook.io/docs/rook/v0.8/rbac.html +# https://github.com/rook/rook/blob/master/cluster/examples/kubernetes/ceph/cluster.yaml + +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.rookClusterNamespace }} + +--- +# Next 3 items: Allow the pods in this namespace to work with configmaps +apiVersion: v1 +kind: ServiceAccount +metadata: + name: rook-ceph-cluster + namespace: {{ .Values.rookClusterNamespace }} + +--- +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: rook-ceph-cluster + namespace: {{ .Values.rookClusterNamespace }} +rules: +- apiGroups: [""] + resources: ["configmaps"] + verbs: [ "get", "list", "watch", "create", "update", "delete" ] + +--- +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: rook-ceph-cluster + namespace: {{ .Values.rookClusterNamespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: rook-ceph-cluster +subjects: +- kind: ServiceAccount + name: rook-ceph-cluster + namespace: {{ .Values.rookClusterNamespace }} + +--- +# Allow the operator to create resources in this cluster's namespace +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: rook-ceph-cluster-mgmt + namespace: {{ .Values.rookClusterNamespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: rook-ceph-cluster-mgmt +subjects: +- kind: ServiceAccount + name: rook-ceph-system + namespace: {{ .Values.rookSystemNamespace }} + diff --git a/helm-charts/storage/rook-cluster/templates/NOTES.txt b/helm-charts/storage/rook-cluster/templates/NOTES.txt new file mode 100644 index 0000000..ede3f63 --- /dev/null +++ b/helm-charts/storage/rook-cluster/templates/NOTES.txt @@ -0,0 +1,11 @@ +This chart creates a Ceph cluster using Rook (similar to Rook's cluster.yaml) + +Ceph data is stored in this directory on all nodes: {{ .Values.cephDataDir }} + +The Ceph pool name is: {{ .Values.rookPoolName }} + +StorageClasses provided: + + Rados Block Device (volumes): {{ .Values.rbdStorageClassName }} + Shared CephFS Filesystem: {{ .Values.fsStorageClassName }}, of size: {{ .Values.rookCephfsPersistentVolumeSize }} + diff --git a/helm-charts/storage/rook-cluster/templates/ceph_cluster.yaml b/helm-charts/storage/rook-cluster/templates/ceph_cluster.yaml new file mode 100644 index 0000000..99d939a --- /dev/null +++ b/helm-charts/storage/rook-cluster/templates/ceph_cluster.yaml @@ -0,0 +1,60 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# reference: https://rook.github.io/docs/rook/v0.8/ceph-cluster-crd.html +# Modeled after "Storage Configuration: Cluster wide Directories" + +apiVersion: ceph.rook.io/v1beta1 +kind: Cluster +metadata: + name: rook-ceph + namespace: {{ .Values.rookClusterNamespace }} +spec: + dataDirHostPath: /var/lib/rook + serviceAccount: rook-ceph-cluster + # cluster level storage configuration and selection + storage: + useAllNodes: true + useAllDevices: false + config: + databaseSizeMB: "1024" # this value can be removed for environments with normal sized disks (100 GB or larger) + journalSizeMB: "1024" # this value can be removed for environments with normal sized disks (20 GB or larger) + directories: + - path: {{ .Values.cephDataDir | quote }} + +--- +# reference: https://rook.io/docs/rook/v0.8/ceph-pool-crd.html + +apiVersion: ceph.rook.io/v1beta1 +kind: Pool +metadata: + name: {{ .Values.rookPoolName }} + namespace: {{ .Values.rookClusterNamespace }} +spec: + replicated: + size: 2 + +--- +# reference: https://rook.io/docs/rook/v0.8/block.html + +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ .Values.rbdStorageClassName }} +provisioner: ceph.rook.io/block +parameters: + pool: {{ .Values.rookPoolName }} + clusterNamespace: {{ .Values.rookClusterNamespace }} + diff --git a/helm-charts/storage/rook-cluster/templates/ceph_fs.yaml b/helm-charts/storage/rook-cluster/templates/ceph_fs.yaml new file mode 100644 index 0000000..e53d1d3 --- /dev/null +++ b/helm-charts/storage/rook-cluster/templates/ceph_fs.yaml @@ -0,0 +1,58 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# reference: https://rook.github.io/docs/rook/v0.8/filesystem.html + +apiVersion: ceph.rook.io/v1beta1 +kind: Filesystem +metadata: + name: {{ .Values.rookCephfsName }} + namespace: {{ .Values.rookClusterNamespace }} +spec: + metadataPool: + replicated: + size: 2 + dataPools: + - replicated: + size: 2 + metadataServer: + activeCount: 1 + activeStandby: true + +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ .Values.fsStorageClassName }} +provisioner: kubernetes.io/no-provisioner + +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: {{ .Values.rookCephfsPersistentVolumeName }} +spec: + storageClassName: {{ .Values.fsStorageClassName }} + capacity: + storage: {{ .Values.rookCephfsPersistentVolumeSize }} + accessModes: + - ReadWriteMany + flexVolume: + driver: ceph.rook.io/rook + fsType: ceph + options: + fsName: {{ .Values.rookCephfsName }} + clusterNamespace: {{ .Values.rookClusterNamespace }} + diff --git a/helm-charts/storage/rook-cluster/values.yaml b/helm-charts/storage/rook-cluster/values.yaml new file mode 100644 index 0000000..04470a9 --- /dev/null +++ b/helm-charts/storage/rook-cluster/values.yaml @@ -0,0 +1,33 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# values file for rook-cluster + +# directory on k8s nodes that holds ceph data +cephDataDir: "/mnt/ceph" + +rookSystemNamespace: "rook-ceph-system" +rookClusterNamespace: "rook-ceph" + +rookPoolName: "cord-ceph-pool" +rookCephfsName: "cord-ceph-filesystem" + +rookCephfsPersistentVolumeName: "cord-cephfs-pv" +rookCephfsPersistentVolumeSize: 20Gi + +# StorageClass used by other charts to create PersistentVolumeClaims +rbdStorageClassName: "cord-ceph-rbd" +fsStorageClassName: "cord-cephfs" + diff --git a/helm-charts/storage/rook-operator/Chart.yaml b/helm-charts/storage/rook-operator/Chart.yaml new file mode 100644 index 0000000..3f48df7 --- /dev/null +++ b/helm-charts/storage/rook-operator/Chart.yaml @@ -0,0 +1,19 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +description: Sets up the Rook operator to provide storage +name: rook-operator +version: 0.1.0-dev0 + diff --git a/helm-charts/storage/rook-operator/requirements.yaml b/helm-charts/storage/rook-operator/requirements.yaml new file mode 100644 index 0000000..a16d9c4 --- /dev/null +++ b/helm-charts/storage/rook-operator/requirements.yaml @@ -0,0 +1,19 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: rook-ceph + version: 0.8.1 + repository: https://charts.rook.io/beta diff --git a/helm-charts/storage/rook-operator/templates/NOTES.txt b/helm-charts/storage/rook-operator/templates/NOTES.txt new file mode 100644 index 0000000..dba486d --- /dev/null +++ b/helm-charts/storage/rook-operator/templates/NOTES.txt @@ -0,0 +1,4 @@ +This chart creates a Ceph provisioning operator with Rook (similar to Rook's operator.yaml) + +It must be run in the {{ .Values.rookSystemNamespace }} namespace + diff --git a/helm-charts/storage/rook-operator/values.yaml b/helm-charts/storage/rook-operator/values.yaml new file mode 100644 index 0000000..55dc678 --- /dev/null +++ b/helm-charts/storage/rook-operator/values.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# values file for rook-operator + +rookSystemNamespace: "rook-ceph-system" + +rook-ceph: + agent: + flexVolumeDirPath: "/var/lib/kubelet/volume-plugins" + diff --git a/helm-charts/storage/rook-tools/Chart.yaml b/helm-charts/storage/rook-tools/Chart.yaml new file mode 100644 index 0000000..7d34ce3 --- /dev/null +++ b/helm-charts/storage/rook-tools/Chart.yaml @@ -0,0 +1,20 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: rook-tools +description: Toolbox for debuging Rook's Ceph storage +version: 0.1.0-dev0 + +appVersion: 'v0.8.1' diff --git a/helm-charts/storage/rook-tools/templates/NOTES.txt b/helm-charts/storage/rook-tools/templates/NOTES.txt new file mode 100644 index 0000000..b08e84c --- /dev/null +++ b/helm-charts/storage/rook-tools/templates/NOTES.txt @@ -0,0 +1,11 @@ +This chart loads the Rook toolbox container. + +Documentation: + https://rook.io/docs/rook/v0.8/toolbox.html + +Once loaded, run: + +kubectl -n {{ .Values.rookClusterNamespace }} exec -it rook-ceph-tools bash + +to access the tools + diff --git a/helm-charts/storage/rook-tools/templates/toolbox.yaml b/helm-charts/storage/rook-tools/templates/toolbox.yaml new file mode 100644 index 0000000..0b14243 --- /dev/null +++ b/helm-charts/storage/rook-tools/templates/toolbox.yaml @@ -0,0 +1,61 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: rook-ceph-tools + namespace: {{ .Values.rookClusterNamespace }} +spec: + dnsPolicy: ClusterFirstWithHostNet + containers: + - name: rook-ceph-tools + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: ROOK_ADMIN_SECRET + valueFrom: + secretKeyRef: + name: rook-ceph-mon + key: admin-secret + securityContext: + privileged: true + volumeMounts: + - mountPath: /dev + name: dev + - mountPath: /sys/bus + name: sysbus + - mountPath: /lib/modules + name: libmodules + - name: mon-endpoint-volume + mountPath: /etc/rook + hostNetwork: false + volumes: + - name: dev + hostPath: + path: /dev + - name: sysbus + hostPath: + path: /sys/bus + - name: libmodules + hostPath: + path: /lib/modules + - name: mon-endpoint-volume + configMap: + name: rook-ceph-mon-endpoints + items: + - key: data + path: mon-endpoints + diff --git a/helm-charts/storage/rook-tools/values.yaml b/helm-charts/storage/rook-tools/values.yaml new file mode 100644 index 0000000..5fafd08 --- /dev/null +++ b/helm-charts/storage/rook-tools/values.yaml @@ -0,0 +1,27 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# values file for rook-tools + +rookClusterNamespace: 'rook-ceph' + +image: + repository: 'rook/ceph-toolbox' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'IfNotPresent' + +global: + registry: '' + diff --git a/helm-charts/ves-agent/Chart.yaml b/helm-charts/ves-agent/Chart.yaml new file mode 100644 index 0000000..5f97dd0 --- /dev/null +++ b/helm-charts/ves-agent/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018- Cisco +# +# 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. + +name: ves-agent +description: A Helm chart for Kubernetes +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.0 +appVersion: 1.0.0 diff --git a/helm-charts/ves-agent/templates/_helpers.tpl b/helm-charts/ves-agent/templates/_helpers.tpl new file mode 100644 index 0000000..cd538cd --- /dev/null +++ b/helm-charts/ves-agent/templates/_helpers.tpl @@ -0,0 +1,42 @@ +# Copyright 2018- Cisco +# +# 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. + +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "ves-agent.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 "ves-agent.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "ves-agent.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/ves-agent/templates/configMap.yaml b/helm-charts/ves-agent/templates/configMap.yaml new file mode 100644 index 0000000..aabb015 --- /dev/null +++ b/helm-charts/ves-agent/templates/configMap.yaml @@ -0,0 +1,36 @@ +# Copyright 2018- Cisco +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: ves-agent-config + labels: + app: {{ template "ves-agent.name" . }} + chart: {{ template "ves-agent.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + +data: + config.properties: |- + onap_ves_address={{ .Values.onap.ves_address }} + onap_ves_port={{ .Values.onap.ves_port }} + + kafka_address={{ .Values.kafka.address }} + kafka_port={{ .Values.kafka.port }} + kafka_alarms_topic={{ .Values.kafka.alarms_topic }} + kafka_kpis_topic={{ .Values.kafka.kpis_topic }} + + co_id={{ .Values.co_id }} + pod_id={{ .Values.pod_id }} diff --git a/helm-charts/ves-agent/templates/deployment.yaml b/helm-charts/ves-agent/templates/deployment.yaml new file mode 100644 index 0000000..ff9d4a9 --- /dev/null +++ b/helm-charts/ves-agent/templates/deployment.yaml @@ -0,0 +1,52 @@ +# Copyright 2018- Cisco +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "ves-agent.name" . }} + labels: + app: {{ template "ves-agent.name" . }} + chart: {{ template "ves-agent.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "ves-agent.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "ves-agent.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + volumeMounts: + - name: agent-config + mountPath: /opt/ves-agent/config.properties + subPath: config.properties + + volumes: + - name: agent-config + configMap: + name: ves-agent-config diff --git a/helm-charts/ves-agent/templates/service.yaml b/helm-charts/ves-agent/templates/service.yaml new file mode 100644 index 0000000..fb8f7bf --- /dev/null +++ b/helm-charts/ves-agent/templates/service.yaml @@ -0,0 +1,33 @@ +# Copyright 2018- Cisco +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "ves-agent.name" . }} + labels: + app: {{ template "ves-agent.name" . }} + chart: {{ template "ves-agent.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + app: {{ template "ves-agent.name" . }} + release: {{ .Release.Name }} diff --git a/helm-charts/ves-agent/values.yaml b/helm-charts/ves-agent/values.yaml new file mode 100644 index 0000000..137031c --- /dev/null +++ b/helm-charts/ves-agent/values.yaml @@ -0,0 +1,41 @@ +# Copyright 2018- Cisco +# +# 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. + +replicaCount: 1 +nameOverride: "" + +image: + repository: 'opencord/ves-agent' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +co_id: test_co +pod_id: test_pod + +onap: + ves_address: "onap" + ves_port: 30235 + +kafka: + address: "cord-kafka" + port: "9092" + alarms_topic: "voltha.alarms" + kpis_topic: "voltha.kpis" + +service: + type: ClusterIP + port: 8080 diff --git a/helm-charts/voltha/Chart.yaml b/helm-charts/voltha/Chart.yaml new file mode 100644 index 0000000..49d978e --- /dev/null +++ b/helm-charts/voltha/Chart.yaml @@ -0,0 +1,20 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: voltha +description: A Helm chart for Voltha based on K8S resources in Voltha project +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.4 +appVersion: 1.6.0 diff --git a/helm-charts/voltha/requirements.yaml b/helm-charts/voltha/requirements.yaml new file mode 100644 index 0000000..0fde5ef --- /dev/null +++ b/helm-charts/voltha/requirements.yaml @@ -0,0 +1,20 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +dependencies: +- name: etcd-cluster + version: 0.1.2 + repository: file://../etcd-cluster + condition: etcd.cluster.enabled diff --git a/helm-charts/voltha/templates/05-namespace.yaml b/helm-charts/voltha/templates/05-namespace.yaml new file mode 100644 index 0000000..0944162 --- /dev/null +++ b/helm-charts/voltha/templates/05-namespace.yaml @@ -0,0 +1,18 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Namespace +metadata: + name: ingress-nginx diff --git a/helm-charts/voltha/templates/10-default-backend.yaml b/helm-charts/voltha/templates/10-default-backend.yaml new file mode 100644 index 0000000..6ada98f --- /dev/null +++ b/helm-charts/voltha/templates/10-default-backend.yaml @@ -0,0 +1,68 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: default-http-backend + labels: + app: default-http-backend + namespace: {{ .Values.global.namespace }} +spec: + replicas: 1 + template: + metadata: + labels: + app: default-http-backend + spec: + terminationGracePeriodSeconds: 60 + containers: + - name: default-http-backend + # Any image is permissable as long as: + # 1. It serves a 404 page at / + # 2. It serves 200 on a /healthz endpoint + image: {{ .Values.global.registry }}{{ .Values.images.http_backend.repository }}:{{ tpl .Values.images.http_backend.tag . }} + imagePullPolicy: {{ .Values.images.http_backend.pullPolicy }} + livenessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + initialDelaySeconds: 30 + timeoutSeconds: 5 + ports: + - containerPort: 8080 + resources: + limits: + cpu: 10m + memory: 20Mi + requests: + cpu: 10m + memory: 20Mi +--- + +apiVersion: v1 +kind: Service +metadata: + name: default-http-backend + namespace: {{ .Values.global.namespace }} + labels: + app: default-http-backend +spec: + ports: + - port: 80 + targetPort: 8080 + selector: + app: default-http-backend diff --git a/helm-charts/voltha/templates/20-configmap.yaml b/helm-charts/voltha/templates/20-configmap.yaml new file mode 100644 index 0000000..7ee406a --- /dev/null +++ b/helm-charts/voltha/templates/20-configmap.yaml @@ -0,0 +1,21 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +kind: ConfigMap +apiVersion: v1 +metadata: + name: nginx-configuration + namespace: {{ .Values.global.namespace }} + labels: + app: ingress-nginx diff --git a/helm-charts/voltha/templates/30-tcp-services-configmap.yaml b/helm-charts/voltha/templates/30-tcp-services-configmap.yaml new file mode 100644 index 0000000..d815835 --- /dev/null +++ b/helm-charts/voltha/templates/30-tcp-services-configmap.yaml @@ -0,0 +1,19 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +kind: ConfigMap +apiVersion: v1 +metadata: + name: tcp-services + namespace: {{ .Values.global.namespace }} diff --git a/helm-charts/voltha/templates/40-udp-services-configmap.yaml b/helm-charts/voltha/templates/40-udp-services-configmap.yaml new file mode 100644 index 0000000..380ab34 --- /dev/null +++ b/helm-charts/voltha/templates/40-udp-services-configmap.yaml @@ -0,0 +1,19 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +kind: ConfigMap +apiVersion: v1 +metadata: + name: udp-services + namespace: {{ .Values.global.namespace }} diff --git a/helm-charts/voltha/templates/50-rbac.yaml b/helm-charts/voltha/templates/50-rbac.yaml new file mode 100644 index 0000000..66b6c71 --- /dev/null +++ b/helm-charts/voltha/templates/50-rbac.yaml @@ -0,0 +1,147 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: nginx-ingress-serviceaccount + namespace: {{ .Values.global.namespace }} + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + name: nginx-ingress-clusterrole +rules: + - apiGroups: + - "" + resources: + - configmaps + - endpoints + - nodes + - pods + - secrets + verbs: + - list + - watch + - apiGroups: + - "" + resources: + - nodes + verbs: + - get + - apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - apiGroups: + - "extensions" + resources: + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - "extensions" + resources: + - ingresses/status + verbs: + - update + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: Role +metadata: + name: nginx-ingress-role + namespace: {{ .Values.global.namespace }} +rules: + - apiGroups: + - "" + resources: + - configmaps + - pods + - secrets + - namespaces + verbs: + - get + - apiGroups: + - "" + resources: + - configmaps + resourceNames: + # Defaults to "-" + # Here: "-" + # This has to be adapted if you change either parameter + # when launching the nginx-ingress-controller. + - "ingress-controller-leader-nginx" + verbs: + - get + - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + name: nginx-ingress-role-nisa-binding + namespace: {{ .Values.global.namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: nginx-ingress-role +subjects: + - kind: ServiceAccount + name: nginx-ingress-serviceaccount + namespace: {{ .Values.global.namespace }} + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: nginx-ingress-clusterrole-nisa-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: nginx-ingress-clusterrole +subjects: + - kind: ServiceAccount + name: nginx-ingress-serviceaccount + namespace: {{ .Values.global.namespace }} diff --git a/helm-charts/voltha/templates/54-namespace.yaml b/helm-charts/voltha/templates/54-namespace.yaml new file mode 100644 index 0000000..db72ff1 --- /dev/null +++ b/helm-charts/voltha/templates/54-namespace.yaml @@ -0,0 +1,23 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# +# Observation: +# It appears that when a namespace is created, Kubernetes creates +# a ServiceAccount called "default" for that new namespace. +# +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.global.namespace }} diff --git a/helm-charts/voltha/templates/55-rbac.yaml b/helm-charts/voltha/templates/55-rbac.yaml new file mode 100644 index 0000000..16ee8b3 --- /dev/null +++ b/helm-charts/voltha/templates/55-rbac.yaml @@ -0,0 +1,111 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: voltha-serviceaccount + namespace: {{ .Values.global.namespace }} + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + name: voltha-clusterrole +rules: + - apiGroups: + - '*' + resources: + - '*' + verbs: + - '*' + - nonResourceURLs: + - '*' + verbs: + - '*' + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: Role +metadata: + name: voltha-role + namespace: {{ .Values.global.namespace }} +rules: + - apiGroups: + - "" + resources: + - configmaps + - pods + - secrets + - namespaces + verbs: + - get + - apiGroups: + - "" + resources: + - configmaps + resourceNames: + # Defaults to "-" + # Here: "-" + # This has to be adapted if you change either parameter + # when launching the voltha-controller. + - "ingress-controller-leader-nginx" + verbs: + - get + - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + name: voltha-role-nisa-binding + namespace: {{ .Values.global.namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: voltha-role +subjects: + - kind: ServiceAccount + name: voltha-serviceaccount + namespace: {{ .Values.global.namespace }} + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: voltha-clusterrole-nisa-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: voltha-clusterrole +subjects: + - kind: ServiceAccount + name: voltha-serviceaccount + namespace: {{ .Values.global.namespace }} diff --git a/helm-charts/voltha/templates/60-cluster-ingress-nginx.yaml b/helm-charts/voltha/templates/60-cluster-ingress-nginx.yaml new file mode 100644 index 0000000..98517ee --- /dev/null +++ b/helm-charts/voltha/templates/60-cluster-ingress-nginx.yaml @@ -0,0 +1,88 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: nginx-ingress-controller + namespace: {{ .Values.global.namespace }} +spec: + replicas: 1 + selector: + matchLabels: + app: ingress-nginx + template: + metadata: + labels: + app: ingress-nginx + annotations: + prometheus.io/port: '10254' + prometheus.io/scrape: 'true' + spec: + serviceAccountName: nginx-ingress-serviceaccount + initContainers: + - command: + - sh + - -c + - sysctl -w net.core.somaxconn=32768; sysctl -w net.ipv4.ip_local_port_range="1024 65535" + image: {{ .Values.global.registry }}{{ .Values.images.ingress_controller_base.repository }}:{{ tpl .Values.images.ingress_controller_base.tag . }} + imagePullPolicy: {{ .Values.images.ingress_controller_base.pullPolicy }} + name: sysctl + securityContext: + privileged: true + containers: + - name: nginx-ingress-controller + image: {{ .Values.global.registry }}{{ .Values.images.ingress_controller.repository }}:{{ tpl .Values.images.ingress_controller.tag . }} + imagePullPolicy: {{ .Values.images.ingress_controller.pullPolicy }} + args: + - /nginx-ingress-controller + - --default-backend-service=$(POD_NAMESPACE)/default-http-backend + - --configmap=$(POD_NAMESPACE)/nginx-configuration + - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services + - --udp-services-configmap=$(POD_NAMESPACE)/udp-services + - --annotations-prefix=nginx.ingress.kubernetes.io + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + ports: + - name: http + containerPort: 80 + - name: https + containerPort: 443 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 diff --git a/helm-charts/voltha/templates/70-service-ingress-nginx.yaml b/helm-charts/voltha/templates/70-service-ingress-nginx.yaml new file mode 100644 index 0000000..3af54d2 --- /dev/null +++ b/helm-charts/voltha/templates/70-service-ingress-nginx.yaml @@ -0,0 +1,32 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: ingress-nginx + namespace: {{ .Values.global.namespace }} +spec: + type: NodePort + selector: + app: ingress-nginx + ports: + - name: http + port: 80 + nodePort: 30080 + targetPort: http + - name: https + port: 443 + nodePort: 30443 + targetPort: https diff --git a/helm-charts/voltha/templates/80-ingress.yaml b/helm-charts/voltha/templates/80-ingress.yaml new file mode 100644 index 0000000..8f28775 --- /dev/null +++ b/helm-charts/voltha/templates/80-ingress.yaml @@ -0,0 +1,38 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: voltha-ingress + namespace: {{ .Values.global.namespace }} + annotations: + kubernetes.io/ingress.class: "nginx" + ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: k8s-consul + http: + paths: + - path: / + backend: + serviceName: consul + servicePort: 8500 + - host: k8s-grafana + http: + paths: + - path: / + backend: + serviceName: grafana + servicePort: 8883 diff --git a/helm-charts/voltha/templates/_helpers.tpl b/helm-charts/voltha/templates/_helpers.tpl new file mode 100644 index 0000000..12d1cbb --- /dev/null +++ b/helm-charts/voltha/templates/_helpers.tpl @@ -0,0 +1,60 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} + +{{- define "voltha-vcore.cmd" }} +- "voltha/voltha/main.py" +- "--etcd={{ .Values.etcdReleaseName }}.default.svc.cluster.local:2379" +- "--kafka={{ .Values.kafkaReleaseName }}.default.svc.cluster.local" +- "--rest-port=8880" +- "--grpc-port=50556" +- "--interface=eth1" +- "--backend=etcd" +- "--pon-subnet=10.38.0.0/12" +- "--ponsim-comm=grpc" +- "--core-number-extractor=^.*-([0-9]+)_.*$" +{{- end }} + +{{- define "logconfig.yml" }} +version: 1 + +formatters: + default: + format: '%(asctime)s.%(msecs)03d %(levelname)-8s %(threadName)s %(module)s.%(funcName)s %(message)s' + datefmt: '%Y%m%dT%H%M%S' + +handlers: + console: + class : logging.StreamHandler + formatter: default + stream: ext://sys.stdout + localRotatingFile: + class: logging.handlers.RotatingFileHandler + filename: voltha.log + formatter: default + maxBytes: 2097152 + backupCount: 10 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .KafkaServer }}" + topic: "voltha.log.{{ .KafkaTopic }}" + +loggers: + '': + handlers: [console, localRotatingFile, kafka] + level: {{ .loglevel }} + propagate: False +{{- end }} diff --git a/helm-charts/voltha/templates/alarm-generator.yaml b/helm-charts/voltha/templates/alarm-generator.yaml new file mode 100644 index 0000000..f5ef095 --- /dev/null +++ b/helm-charts/voltha/templates/alarm-generator.yaml @@ -0,0 +1,48 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +{{- if .Values.alarm_generator_enable }} +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: alarm-generator + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +spec: + replicas: {{ .Values.replicas.alarm_generator }} + template: + metadata: + labels: + app: alarm-generator + annotations: + cni: "calico" + spec: + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + containers: + - name: alarm-generator + image: {{ .Values.global.registry }}{{ .Values.images.alarm_generator.repository }}:{{ tpl .Values.images.alarm_generator.tag . }} + imagePullPolicy: {{ .Values.images.alarm_generator.pullPolicy }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + args: +{{ toYaml .Values.alarm_generator_args | indent 12 }} +{{- end }} diff --git a/helm-charts/voltha/templates/envoy_for_etcd.yaml b/helm-charts/voltha/templates/envoy_for_etcd.yaml new file mode 100644 index 0000000..5966076 --- /dev/null +++ b/helm-charts/voltha/templates/envoy_for_etcd.yaml @@ -0,0 +1,73 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: voltha + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + labels: + name: voltha +spec: + type: {{ .Values.services.envoy.serviceType }} +{{ toYaml .Values.services.envoy.serviceInfo | indent 2 }} + selector: + app: voltha +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: voltha + namespace: {{ .Values.global.namespace }} +spec: + replicas: {{ .Values.replicas.envoy_for_etcd }} + template: + metadata: + labels: + app: voltha + spec: + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + containers: + - name: voltha + image: {{ .Values.global.registry }}{{ .Values.images.envoy_for_etcd.repository }}:{{ tpl .Values.images.envoy_for_etcd.tag . }} + imagePullPolicy: {{ .Values.images.envoy_for_etcd.pullPolicy }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + args: + - "/usr/local/bin/envoyd" + - "-envoy-cfg-template=/envoy/voltha-grpc-proxy.template.json" + - "-envoy-config=/envoy/voltha-grpc-proxy.json" + - "-kv=etcd" + - "-kv-svc-name={{ .Values.etcdReleaseName }}.default.svc.cluster.local" + - "-kv-port=2379" + ports: + - containerPort: 8882 + name: rest-port + - containerPort: 8001 + name: mystery-port + - containerPort: 8443 + name: mystery2-port + - containerPort: 50555 + name: grpc-port + + diff --git a/helm-charts/voltha/templates/freeradius-config.yaml b/helm-charts/voltha/templates/freeradius-config.yaml new file mode 100644 index 0000000..92229d8 --- /dev/null +++ b/helm-charts/voltha/templates/freeradius-config.yaml @@ -0,0 +1,30 @@ +# Copyright 2017-present Open Networking Foundation +# +# 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. + +{{- if .Values.freeradius.enabled }} +apiVersion: v1 +data: + clients.conf: | + client 0.0.0.0/0 { + secret = SECRET + } + users: | + user Cleartext-Password := "password", MS-CHAP-Use-NTLM-Auth := 0 + +kind: ConfigMap +metadata: + name: freeradius-config + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +{{- end}} diff --git a/helm-charts/voltha/templates/freeradius.yaml b/helm-charts/voltha/templates/freeradius.yaml new file mode 100644 index 0000000..ef86b16 --- /dev/null +++ b/helm-charts/voltha/templates/freeradius.yaml @@ -0,0 +1,95 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +{{- if .Values.freeradius.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: freeradius + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + labels: + name: freeradius +spec: + clusterIP: None + ports: + - name: radius-auth + protocol: UDP + port: 1812 + targetPort: 1812 + - name: radius-acc + protocol: UDP + port: 1813 + targetPort: 1813 + - name: radius + port: 18120 + targetPort: 18120 + selector: + app: freeradius +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: freeradius + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +spec: + replicas: 1 + template: + metadata: + labels: + app: freeradius + annotations: + cni: "calico" + spec: + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + containers: + - name: freeradius + image: {{ .Values.global.registry }}{{ .Values.images.freeradius.repository }}:{{ tpl .Values.images.freeradius.tag . }} + imagePullPolicy: {{ .Values.images.freeradius.pullPolicy }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: RADIUS_LISTEN_IP + value: "*" + - name: USERS_FILE + value: "/etc/raddb/users" + - name: RADIUS_CLIENTS + value: "SECRET@0.0.0.0/0" + ports: + - containerPort: 1812 + name: radauth-port + - containerPort: 1813 + name: radacc-port + - containerPort: 18120 + name: radius-port + volumeMounts: + - name: freeradius-config + mountPath: /etc/raddb/clients.conf + subPath: clients.conf + - name: freeradius-config + mountPath: /etc/raddb/users + subPath: users + volumes: + - name: freeradius-config + configMap: + name: freeradius-config +{{- end}} diff --git a/helm-charts/voltha/templates/logconfigmaps.yaml b/helm-charts/voltha/templates/logconfigmaps.yaml new file mode 100644 index 0000000..62e8109 --- /dev/null +++ b/helm-charts/voltha/templates/logconfigmaps.yaml @@ -0,0 +1,48 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. +apiVersion: v1 +kind: ConfigMap +metadata: + name: vcore-logconfig + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +data: + logconfig: | + {{- $data := dict "KafkaServer" (printf "%s.default:9092" .Values.kafkaReleaseName) "KafkaTopic" "vcore" "loglevel" .Values.loglevel }} +{{ include "logconfig.yml" $data | indent 4 }} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: netconf-logconfig + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +data: + logconfig: | +{{- $data := dict "KafkaServer" (printf "%s.default:9092" .Values.kafkaReleaseName) "KafkaTopic" "netconf" "loglevel" .Values.loglevel }} +{{ include "logconfig.yml" $data | indent 4 }} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: ofagent-logconfig + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +data: + logconfig: | +{{- $data := dict "KafkaServer" (printf "%s.default:9092" .Values.kafkaReleaseName) "KafkaTopic" "ofagent" "loglevel" .Values.loglevel }} +{{ include "logconfig.yml" $data | indent 4 }} diff --git a/helm-charts/voltha/templates/netconf.yaml b/helm-charts/voltha/templates/netconf.yaml new file mode 100644 index 0000000..7aa571b --- /dev/null +++ b/helm-charts/voltha/templates/netconf.yaml @@ -0,0 +1,68 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: netconf + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +spec: + selector: + app: netconf + clusterIP: None + ports: + - port: 830 + targetPort: 830 +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: netconf + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +spec: + replicas: {{ .Values.replicas.netconf }} + template: + metadata: + labels: + app: netconf + annotations: + cni: "calico" + spec: + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + terminationGracePeriodSeconds: 10 + containers: + - name: netconf + image: {{ .Values.global.registry }}{{ .Values.images.netconf.repository }}:{{ tpl .Values.images.netconf.tag . }} + imagePullPolicy: {{ .Values.images.netconf.pullPolicy }} + ports: + - containerPort: 830 + env: + - name: NETCONF_PORT + value: "830" + args: +{{ toYaml .Values.netconf_args | indent 12}} + volumeMounts: + - name: netconf-logconfig-vol + mountPath: /netconf/netconf/logconfig.yml + subPath: logconfig.yml + volumes: + - name: netconf-logconfig-vol + configMap: + name: netconf-logconfig + items: + - key: logconfig + path: logconfig.yml diff --git a/helm-charts/voltha/templates/ofagent.yaml b/helm-charts/voltha/templates/ofagent.yaml new file mode 100644 index 0000000..c70f408 --- /dev/null +++ b/helm-charts/voltha/templates/ofagent.yaml @@ -0,0 +1,54 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: ofagent + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +spec: + replicas: {{ .Values.replicas.ofagent }} + template: + metadata: + labels: + app: ofagent + annotations: + cni: "calico" + spec: + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + terminationGracePeriodSeconds: 10 + containers: + - name: ofagent + image: {{ .Values.global.registry }}{{ .Values.images.ofagent.repository }}:{{ tpl .Values.images.ofagent.tag . }} + imagePullPolicy: {{ .Values.images.ofagent.pullPolicy }} + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + args: +{{ toYaml .Values.ofagent_args | indent 12 }} + volumeMounts: + - name: ofagent-logconfig-vol + mountPath: /ofagent/ofagent/logconfig.yml + subPath: logconfig.yml + volumes: + - name: ofagent-logconfig-vol + configMap: + name: ofagent-logconfig + items: + - key: logconfig + path: logconfig.yml diff --git a/helm-charts/voltha/templates/vcli.yaml b/helm-charts/voltha/templates/vcli.yaml new file mode 100644 index 0000000..2077705 --- /dev/null +++ b/helm-charts/voltha/templates/vcli.yaml @@ -0,0 +1,69 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: vcli + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + labels: + name: vcli +spec: + type: NodePort + ports: + - name: ssh + port: 5022 + targetPort: 22 + nodePort: {{ .Values.node_ports.vcli_port }} + selector: + app: vcli +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: vcli + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +spec: + replicas: {{ .Values.replicas.vcli }} + template: + metadata: + labels: + app: vcli + annotations: + cni: "calico" + spec: + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + containers: + - name: vcli + image: {{ .Values.global.registry }}{{ .Values.images.vcli.repository }}:{{ tpl .Values.images.vcli.tag . }} + imagePullPolicy: {{ .Values.images.vcli.pullPolicy }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + args: +{{ toYaml .Values.vcli_args | indent 12 }} + ports: + - containerPort: 22 + name: ssh-port + + diff --git a/helm-charts/voltha/templates/vcore_for_etcd.yaml b/helm-charts/voltha/templates/vcore_for_etcd.yaml new file mode 100644 index 0000000..5ea1d42 --- /dev/null +++ b/helm-charts/voltha/templates/vcore_for_etcd.yaml @@ -0,0 +1,90 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: vcore + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + labels: + name: vcore +spec: + clusterIP: None + ports: + - name: rest + port: 8880 + targetPort: 8880 + - name: mystery + port: 18880 + targetPort: 18880 + - name: grpc + port: 50556 + targetPort: 50556 + selector: + app: vcore +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: vcore + namespace: {{ .Values.global.namespace }} + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount +spec: + serviceName: vcore + replicas: {{ .Values.replicas.vcore }} + updateStrategy: + type: RollingUpdate + selector: + matchLabels: + app: vcore + template: + metadata: + labels: + app: vcore + annotations: + cni: "calico" + spec: + terminationGracePeriodSeconds: 0 + serviceAccountName: {{ .Values.global.namespace }}-serviceaccount + containers: + - name: voltha + image: {{ .Values.global.registry }}{{ .Values.images.vcore.repository }}:{{ tpl .Values.images.vcore.tag . }} + imagePullPolicy: {{ .Values.images.vcore.pullPolicy }} + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + args: +{{ include "voltha-vcore.cmd" . | indent 12 }} + ports: + - containerPort: 8880 + name: rest-port + - containerPort: 18880 + name: mystery-port + - containerPort: 50556 + name: grpc-port + volumeMounts: + - name: vcore-logconfig-vol + mountPath: /voltha/voltha/logconfig.yml + subPath: logconfig.yml + volumes: + - name: vcore-logconfig-vol + configMap: + name: vcore-logconfig + items: + - key: logconfig + path: logconfig.yml diff --git a/helm-charts/voltha/values.yaml b/helm-charts/voltha/values.yaml new file mode 100644 index 0000000..3aa83fd --- /dev/null +++ b/helm-charts/voltha/values.yaml @@ -0,0 +1,144 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +replicas: + vcore: 1 + vcli: 1 + ofagent: 1 + netconf: 1 + envoy_for_etcd: 1 + alarm_generator: 1 + +node_ports: + vcli_port: 30110 + +services: + envoy: + serviceType: NodePort + serviceInfo: + ports: + - name: rest + port: 8882 + targetPort: 8882 + nodePort: 30125 + - name: mystery + port: 8001 + targetPort: 8001 + - name: mystery2 + port: 8443 + targetPort: 8443 + nodePort: 32443 + - name: grpc + port: 50555 + targetPort: 50555 + +etcd: + cluster: + enabled: true + +freeradius: + enabled: true + +kafkaReleaseName: cord-kafka +etcdReleaseName: etcd-cluster + +loglevel: "DEBUG" + +images: + vcore: + repository: 'voltha/voltha-voltha' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + vcli: + repository: 'voltha/voltha-cli' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + ofagent: + repository: 'voltha/voltha-ofagent' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + netconf: + repository: 'voltha/voltha-netconf' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + envoy_for_etcd: + repository: 'voltha/voltha-envoy' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + alarm_generator: + repository: 'voltha/voltha-alarm-generator' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + freeradius: + repository: 'tpdock/freeradius' + tag: '2.2.9' + pullPolicy: 'Always' + + http_backend: + repository: 'gcr.io/google_containers/defaultbackend' + tag: '1.4' + pullPolicy: 'Always' + + ingress_controller: + repository: 'quay.io/kubernetes-ingress-controller/nginx-ingress-controller' + tag: '0.10.2' + pullPolicy: 'Always' + + ingress_controller_base: + repository: 'alpine' + tag: '3.6' + pullPolicy: 'Always' + +# Need the namespace global for kafka +global: + namespace: voltha + registry: '' + +vcli_args: +- "/cli/cli/setup.sh" +- "-C consul:8500" +- "-g voltha:50555" +- "-s voltha:18880" +- "-G" + +ofagent_args: +- "/ofagent/ofagent/main.py" +- "--consul=consul.$(NAMESPACE).svc.cluster.local:8500" +- "--controller=onos-openflow.default.svc.cluster.local:6653" +- "--grpc-endpoint=vcore.$(NAMESPACE).svc.cluster.local:50556" + +netconf_args: +- "/netconf/netconf/main.py" +- "--consul=consul:8500" +- "--grpc-endpoint=voltha:50555" + +# set alarm_generator_enable to true to enable alarm generator container. +# uncomment the intf_id and onu_id arguments if no olt is physically present, and a fake onu_id should be used. + +alarm_generator_enable: false +alarm_generator_args: +- "--consul=consul:8500" +- "--grpc-endpoint=voltha:50555" +- "--global_request" +- "--rate=1" +- "--duration=2" +#- "--intf_id=0" +#- "--onu_id=00012bc90d6552dd" diff --git a/helm-charts/workflows/att-workflow/Chart.yaml b/helm-charts/workflows/att-workflow/Chart.yaml new file mode 100644 index 0000000..2cc4f97 --- /dev/null +++ b/helm-charts/workflows/att-workflow/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +name: att-workflow +description: A Helm chart for XOS's "att-workflow" +icon: https://guide.opencord.org/logos/cord.svg +version: 1.2.1 + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/workflows/att-workflow/requirements.yaml b/helm-charts/workflows/att-workflow/requirements.yaml new file mode 100644 index 0000000..3f9d627 --- /dev/null +++ b/helm-charts/workflows/att-workflow/requirements.yaml @@ -0,0 +1,19 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: att-workflow-driver + version: 1.1.0 + repository: file://../../xos-services/att-workflow-driver diff --git a/helm-charts/workflows/att-workflow/templates/_helpers.tpl b/helm-charts/workflows/att-workflow/templates/_helpers.tpl new file mode 100644 index 0000000..6f83543 --- /dev/null +++ b/helm-charts/workflows/att-workflow/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "att-workflow.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 "att-workflow.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "att-workflow.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/workflows/att-workflow/templates/_tosca.tpl b/helm-charts/workflows/att-workflow/templates/_tosca.tpl new file mode 100644 index 0000000..073a5f3 --- /dev/null +++ b/helm-charts/workflows/att-workflow/templates/_tosca.tpl @@ -0,0 +1,129 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} + +{{- define "att-workflow.serviceGraphTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/attworkflowdriverservice.yaml + - custom_types/voltservice.yaml + - custom_types/servicedependency.yaml + - custom_types/servicegraphconstraint.yaml +description: att-workflow-driver service graph +topology_template: + node_templates: + +# These services must be defined before loading the graph + + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + must-exist: true + + service#att-workflow-driver: + type: tosca.nodes.AttWorkflowDriverService + properties: + name: att-workflow-driver + must-exist: true + + service_dependency#workflow_volt: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#att-workflow-driver + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + constraints: + type: tosca.nodes.ServiceGraphConstraint + properties: + constraints: '[[null, "rcord", null], [null, "volt", null], ["onos", "fabric-crossconnect", "att-workflow-driver"], ["fabric", null, null]]' +{{- end -}} + +{{- define "att-workflow.onosTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/onosapp.yaml + - custom_types/onosservice.yaml + - custom_types/serviceinstanceattribute.yaml + +description: Configures workflow-specific ONOS apps + +topology_template: + node_templates: + + service#onos: + type: tosca.nodes.ONOSService + properties: + name: onos + must-exist: true + + onos_app#aaa: + type: tosca.nodes.ONOSApp + properties: + name: aaa + app_id: org.opencord.aaa + url: {{ .Values.aaaAppUrl }} + version: {{ .Values.aaaAppVersion }} + dependencies: org.opencord.sadis + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + aaa-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.aaa + value: > + { + "AAA" : { + "radiusConnectionType" : "socket", + "radiusHost" : "freeradius.voltha.svc.cluster.local", + "radiusServerPort" : "1812", + "radiusSecret" : "SECRET" + } + } + requirements: + - service_instance: + node: onos_app#aaa + relationship: tosca.relationships.BelongsToOne + + onos_app#olt: + type: tosca.nodes.ONOSApp + properties: + name: olt + must-exist: true + + olt-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/configuration/org.opencord.olt.impl.Olt?preset=true + value: > + { + "enableDhcpOnProvisioning" : true + } + requirements: + - service_instance: + node: onos_app#olt + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/workflows/att-workflow/templates/tosca-configmap.yaml b/helm-charts/workflows/att-workflow/templates/tosca-configmap.yaml new file mode 100644 index 0000000..ec4a064 --- /dev/null +++ b/helm-charts/workflows/att-workflow/templates/tosca-configmap.yaml @@ -0,0 +1,27 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: att-workflow-tosca +data: + 010-fixtures.yaml: | +{{ include "att-workflow-driver.serviceTosca" (index .Values "att-workflow-driver") | indent 4 }} + 100-onos-apps.yaml: | +{{ include "att-workflow.onosTosca" . | indent 4 }} + 300-service-graph.yaml: | +{{ include "att-workflow.serviceGraphTosca" . | indent 4 }} diff --git a/helm-charts/workflows/att-workflow/templates/tosca-job.yaml b/helm-charts/workflows/att-workflow/templates/tosca-job.yaml new file mode 100644 index 0000000..a51aaf7 --- /dev/null +++ b/helm-charts/workflows/att-workflow/templates/tosca-job.yaml @@ -0,0 +1,55 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "att-workflow.fullname" . }}-tosca-loader + labels: + app: {{ template "att-workflow.name" . }} + chart: {{ template "att-workflow.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + backoffLimit: 12 + template: + metadata: + labels: + app: {{ template "att-workflow.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.images.tosca_loader.repository }}:{{ tpl .Values.images.tosca_loader.tag . }} + imagePullPolicy: {{ .Values.images.tosca_loader.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: att-workflow-tosca + mountPath: /opt/tosca + volumes: + - name: att-workflow-tosca + configMap: + name: att-workflow-tosca diff --git a/helm-charts/workflows/att-workflow/values.yaml b/helm-charts/workflows/att-workflow/values.yaml new file mode 100644 index 0000000..88e4da4 --- /dev/null +++ b/helm-charts/workflows/att-workflow/values.yaml @@ -0,0 +1,41 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the att-workflow profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + + +nameOverride: "" +fullnameOverride: "" + +images: + tosca_loader: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +att-workflow-driver: + kafkaService: "cord-platform-kafka" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +# ONOS applications +aaaAppUrl: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/aaa/1.8.0/aaa-1.8.0.oar" +aaaAppVersion: "1.8.0" diff --git a/helm-charts/workflows/tt-workflow/Chart.yaml b/helm-charts/workflows/tt-workflow/Chart.yaml new file mode 100644 index 0000000..e95c96b --- /dev/null +++ b/helm-charts/workflows/tt-workflow/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +name: tt-workflow +description: A Helm chart for XOS's "tt-workflow" +icon: https://guide.opencord.org/logos/cord.svg +version: 0.1.2-dev + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/workflows/tt-workflow/requirements.yaml b/helm-charts/workflows/tt-workflow/requirements.yaml new file mode 100644 index 0000000..f02ee70 --- /dev/null +++ b/helm-charts/workflows/tt-workflow/requirements.yaml @@ -0,0 +1,19 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: tt-workflow-driver + version: 0.1.0 + repository: file://../../xos-services/tt-workflow-driver diff --git a/helm-charts/workflows/tt-workflow/templates/_helpers.tpl b/helm-charts/workflows/tt-workflow/templates/_helpers.tpl new file mode 100644 index 0000000..c69782b --- /dev/null +++ b/helm-charts/workflows/tt-workflow/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "tt-workflow.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 "tt-workflow.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "tt-workflow.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/workflows/tt-workflow/templates/_tosca.tpl b/helm-charts/workflows/tt-workflow/templates/_tosca.tpl new file mode 100644 index 0000000..0888759 --- /dev/null +++ b/helm-charts/workflows/tt-workflow/templates/_tosca.tpl @@ -0,0 +1,99 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} + +{{- define "tt-workflow.serviceGraphTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/ttworkflowdriverservice.yaml + - custom_types/voltservice.yaml + - custom_types/servicedependency.yaml + - custom_types/servicegraphconstraint.yaml +description: tt-workflow-driver service graph +topology_template: + node_templates: + +# These services must be defined before loading the graph + + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + must-exist: true + + service#tt-workflow-driver: + type: tosca.nodes.TtWorkflowDriverService + properties: + name: tt-workflow-driver + must-exist: true + + service_dependency#workflow_volt: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#tt-workflow-driver + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + constraints: + type: tosca.nodes.ServiceGraphConstraint + properties: + constraints: '[[null, "rcord", null], [null, "volt", null], ["onos", "fabric-crossconnect", "tt-workflow-driver"], ["fabric", null, null]]' +{{- end -}} + +{{- define "tt-workflow.onosTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/onosapp.yaml + - custom_types/onosservice.yaml + - custom_types/serviceinstanceattribute.yaml + +description: Configures workflow-specific ONOS apps + +topology_template: + node_templates: + + service#onos: + type: tosca.nodes.ONOSService + properties: + name: onos + must-exist: true + + onos_app#olt: + type: tosca.nodes.ONOSApp + properties: + name: olt + must-exist: true + + olt-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/configuration/org.opencord.olt.impl.Olt?preset=true + value: > + { + "enableDhcpOnProvisioning" : true, + "enableEapol" : false + } + requirements: + - service_instance: + node: onos_app#olt + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/workflows/tt-workflow/templates/tosca-configmap.yaml b/helm-charts/workflows/tt-workflow/templates/tosca-configmap.yaml new file mode 100644 index 0000000..beb18bc --- /dev/null +++ b/helm-charts/workflows/tt-workflow/templates/tosca-configmap.yaml @@ -0,0 +1,27 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: tt-workflow-tosca +data: + 010-fixtures.yaml: | +{{ include "tt-workflow-driver.serviceTosca" (index .Values "tt-workflow-driver") | indent 4 }} + 100-onos-apps.yaml: | +{{ include "tt-workflow.onosTosca" . | indent 4 }} + 300-service-graph.yaml: | +{{ include "tt-workflow.serviceGraphTosca" . | indent 4 }} diff --git a/helm-charts/workflows/tt-workflow/templates/tosca-job.yaml b/helm-charts/workflows/tt-workflow/templates/tosca-job.yaml new file mode 100644 index 0000000..5596dbe --- /dev/null +++ b/helm-charts/workflows/tt-workflow/templates/tosca-job.yaml @@ -0,0 +1,55 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "tt-workflow.fullname" . }}-tosca-loader + labels: + app: {{ template "tt-workflow.name" . }} + chart: {{ template "tt-workflow.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + backoffLimit: 12 + template: + metadata: + labels: + app: {{ template "tt-workflow.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.images.tosca_loader.repository }}:{{ tpl .Values.images.tosca_loader.tag . }} + imagePullPolicy: {{ .Values.images.tosca_loader.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: tt-workflow-tosca + mountPath: /opt/tosca + volumes: + - name: tt-workflow-tosca + configMap: + name: tt-workflow-tosca diff --git a/helm-charts/workflows/tt-workflow/values.yaml b/helm-charts/workflows/tt-workflow/values.yaml new file mode 100644 index 0000000..61cea53 --- /dev/null +++ b/helm-charts/workflows/tt-workflow/values.yaml @@ -0,0 +1,37 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the tt-workflow profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + + +nameOverride: "" +fullnameOverride: "" + +images: + tosca_loader: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +tt-workflow-driver: + kafkaService: "cord-platform-kafka" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" diff --git a/helm-charts/xos-core/Chart.yaml b/helm-charts/xos-core/Chart.yaml new file mode 100644 index 0000000..11bdbe7 --- /dev/null +++ b/helm-charts/xos-core/Chart.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: xos-core +description: XOS - An Extensible Cloud Operating System +icon: https://guide.opencord.org/logos/xos.svg + +version: 3.0.2 + +# appVersion is of the xos-core containers. +# xos-tosca, xos-chameleon, and xos-api-tester are versioned in values.yaml +appVersion: 3.2.3 diff --git a/helm-charts/xos-core/pki/xos-CA.pem b/helm-charts/xos-core/pki/xos-CA.pem new file mode 100644 index 0000000..655dc29 --- /dev/null +++ b/helm-charts/xos-core/pki/xos-CA.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID1jCCAr6gAwIBAgIJAIWmwLL7nulVMA0GCSqGSIb3DQEBCwUAMHgxCzAJBgNV +BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRMwEQYDVQQHDApNZW5sbyBQYXJr +MQwwCgYDVQQKDANPTkYxFTATBgNVBAsMDFRlc3RpbmcgT25seTEaMBgGA1UEAwwR +Q09SRCBUZXN0IFJvb3QgQ0EwHhcNMTgxMjE0MTgyNTE5WhcNMTkxMjE1MTgyNTE5 +WjB4MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTETMBEGA1UEBwwK +TWVubG8gUGFyazEMMAoGA1UECgwDT05GMRUwEwYDVQQLDAxUZXN0aW5nIE9ubHkx +GjAYBgNVBAMMEUNPUkQgVGVzdCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAokxdd5vyy83NPQYQK/wsz6VLrunv/3FNSbUv9dC4MC5zZyMd +oxrYCfM38rypbrB5PIVlFdndfDzoYORmlC9gxJnFUmAztyU2JIZrcxk1sQ+lBWj+ +Bytwh1TKT0OSfEWjB/LV1FGLAuspJGBn2T0E35bGhhzOL8Cgm0e8akeAfs2s9akO +Xcj+4osnAkXynKl+HhCTBkcrmg1YsTB3+0ug0vM5xuHMU5tVVKpn9DinZ3enuHle +ICyiMF8JyEibjGl0cjnGhw1lPzT7lsjxuoZhr3NaIlI/zUXBDTJbJ6T6gUa1Npa/ +lurbEn/9pUMQcUIOnIfzbmzVjPmd0AL9fEcAlQIDAQABo2MwYTAdBgNVHQ4EFgQU +xYhJSu6N6DF7C39G1hAvF7JOC54wHwYDVR0jBBgwFoAUxYhJSu6N6DF7C39G1hAv +F7JOC54wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcN +AQELBQADggEBAJc7J+ZVhp7ti+YN2Smv/jtz79NyF1J6Eb3M/BC/A5Eo8Cp2hklC +NI00+con2Dvvbmj6lOgKXPL6C8LgxiZ5gVDtSvK8zuoIzkIDod4IovxcwLrvlIH4 +BpG6Sm1d7EbwAHKFGc0qvVdRN48P884KnzW27eLtsdqrkUPuqz9Ph1JJmAzy3v5p +pKtL6zfn706pcad5NuAcoz0782T+wszHmBv0SBboLdo9NyUciJBQCjIDaSEOpqze +upzRp50aDMq3nxd7yZ3VGA52ECNQ4gWgWAHomDS22RdCHsedbUofnrl6TW88j+Aa ++4AJR9CmhoP1CnKHb5wVCBScw9T8gu3aLe0= +-----END CERTIFICATE----- diff --git a/helm-charts/xos-core/pki/xos-core.key b/helm-charts/xos-core/pki/xos-core.key new file mode 100644 index 0000000..61d1b95 --- /dev/null +++ b/helm-charts/xos-core/pki/xos-core.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA2EuSUdVkDQBJsjf7ZK7NYOVlt6IR16TI3hXQYQr29ajvaHzJ +KRel7hRpy6m1JPy7lXNIF5ad2ooK5e7xxi8tiUGXJrTxchgeAslI2AJaNqsWP/iy +gGJ+UXnvqd1PGILpkucxumRlQEXEF77SVTSPvodffxsrp+Xt2LnNmn8a9RSJMV61 +uRSgFAvgpIlw2LEr6nS9QQLuN/E0uXihMFu5/MJNjjnWhmpVVfvraCAGLB1azU7p +2XC7XfmanNaNT2nUDVooXWp07J0JDeS+zQNzlNNHgyd36JGI7BVHDl7NBUucTfds +EQK1aYY5zgP+nt4zzZMmaVlS8oBJCBWq3j7g/wIDAQABAoIBAFITk0mUZSv90Plc +/vt8zZiYVBnz2TtwX3zO4E0C4SXlXjvTJm5+d8u5WVAcbQ3FDdWvckrpL6tvOKV6 +H6rp2ii8iAP7I6f8+N5rzUWS1vLpxz6tO+c1+OMoF0bpIQuXGdVR/+/QCw/xqXCt +S5ljoaxWKGnOQKmsua3FC/01gGBBIRtd5Vmn6m1R7IYQP6AZjNbE8trb7Q8TO66t +QK3h5oTv36hL7qC2a2L6WiSOOyul7f9wzn2/x6fyNW43nYV3jvf79nKuiv8ZkVjK +qYIlmLSlXwbq7N3eI6mcP6AqyeL9OFAkh0JBoiPsCND9sZV7KpiTieh8mUelxnQr +8qG4c7ECgYEA7HqZTjfhb04s0rihlbHJX7JOP407tOCZCI2QlNL+M29UpBgbx5z3 +jfX0hlj5Vkq/GWvMm288gpBgfKSzh29mpO21GEmWNFqsNdls+f0/DgWs0TYRe9uQ +w4CSfNpvx3LRmh2y0b7BaoDd6X5Rma533zmyiAuDcPZdHfbl+FVZ/+cCgYEA6iZw +kyp4hPRQXyavufXyF6Ej88k5BjtU5CqURcXKmJbP+SfDoHOH4V+erFsgeOl1TAAc +GTXGL4/d4xLBp78U0CgLm0k78kcuKXmKQ5AWeMkn4tPAbxEuqpi2ZrfLd0gE+T/q +mUiphmRL00qIymJQpopn1beAMsowy96L2cybUykCgYBipPmSYUkOryOPeykcUp9X +5f8yD24ak54CrVrkWedj+UrrcIsWB2pUs4afDDpmPqPcrNUa+ZnaNPOqyuGA232L +ywTB7uBTUoeHpv0IgxVsef2O/+jnK74Fb3qrzkrWfhTlHwJa8CGqlbr8DY9odhjW +6zCIA5V+56YMO9POdXwnfQKBgF2wedT45nZUh6A7C48+ENtRl+AhANc0gFg3jVKJ +vPHnTlokhgs6jwEn0Iaog8q9pzh8xsFzmdRIHYGRbLlhJMPRcit1Vy4vOxJPVnqI +OeWkn3gMQHBwkJqkNj/NhPU6dPsCjy08PNDQauKlbSyFwD2THc8O+JXZ/0JjztOc +If5ZAoGAAefyJ6cAs6p8QMBG0nYYtJMeW5cXwGhFMLJTW3B2qMVsDsOL2sp1T3ou +Emn2I02ogmtmmHNxOQY3kRQ5S0PPAraoXxywjB4BaH/VNJgdEntmWI1woPI8j2qq +8RCyi2O5T9YpO2cWRJSXGd6rNFmRQjM+FuznUpqe1BYxLT15bJw= +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-core/pki/xos-core.pem b/helm-charts/xos-core/pki/xos-core.pem new file mode 100644 index 0000000..92c26f2 --- /dev/null +++ b/helm-charts/xos-core/pki/xos-core.pem @@ -0,0 +1,93 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=California, L=Menlo Park, O=ONF, OU=Testing Only, CN=CORD Test Root CA + Validity + Not Before: Dec 14 18:25:19 2018 GMT + Not After : Dec 15 18:25:19 2019 GMT + Subject: C=US, ST=California, L=Menlo Park, O=ONF, OU=Testing Only, CN=xos-core + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:d8:4b:92:51:d5:64:0d:00:49:b2:37:fb:64:ae: + cd:60:e5:65:b7:a2:11:d7:a4:c8:de:15:d0:61:0a: + f6:f5:a8:ef:68:7c:c9:29:17:a5:ee:14:69:cb:a9: + b5:24:fc:bb:95:73:48:17:96:9d:da:8a:0a:e5:ee: + f1:c6:2f:2d:89:41:97:26:b4:f1:72:18:1e:02:c9: + 48:d8:02:5a:36:ab:16:3f:f8:b2:80:62:7e:51:79: + ef:a9:dd:4f:18:82:e9:92:e7:31:ba:64:65:40:45: + c4:17:be:d2:55:34:8f:be:87:5f:7f:1b:2b:a7:e5: + ed:d8:b9:cd:9a:7f:1a:f5:14:89:31:5e:b5:b9:14: + a0:14:0b:e0:a4:89:70:d8:b1:2b:ea:74:bd:41:02: + ee:37:f1:34:b9:78:a1:30:5b:b9:fc:c2:4d:8e:39: + d6:86:6a:55:55:fb:eb:68:20:06:2c:1d:5a:cd:4e: + e9:d9:70:bb:5d:f9:9a:9c:d6:8d:4f:69:d4:0d:5a: + 28:5d:6a:74:ec:9d:09:0d:e4:be:cd:03:73:94:d3: + 47:83:27:77:e8:91:88:ec:15:47:0e:5e:cd:05:4b: + 9c:4d:f7:6c:11:02:b5:69:86:39:ce:03:fe:9e:de: + 33:cd:93:26:69:59:52:f2:80:49:08:15:aa:de:3e: + e0:ff + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 30:AC:5D:59:D7:FD:7D:47:BB:F1:EF:2F:22:2B:4B:D6:8E:66:54:69 + X509v3 Authority Key Identifier: + keyid:C5:88:49:4A:EE:8D:E8:31:7B:0B:7F:46:D6:10:2F:17:B2:4E:0B:9E + DirName:/C=US/ST=California/L=Menlo Park/O=ONF/OU=Testing Only/CN=CORD Test Root CA + serial:85:A6:C0:B2:FB:9E:E9:55 + + X509v3 Basic Constraints: + CA:FALSE + X509v3 Key Usage: critical + Digital Signature, Key Encipherment + X509v3 Extended Key Usage: + TLS Web Server Authentication + X509v3 Subject Alternative Name: + DNS:xos-core, DNS:xos-core.default, DNS:xos-core.default.svc.cluster.local + Signature Algorithm: sha256WithRSAEncryption + 15:cd:7b:ba:21:f0:79:30:8a:be:b9:04:d1:39:d8:ad:de:0f: + 44:eb:64:39:dc:79:7e:57:b7:29:36:a1:dc:66:7b:38:6d:55: + 89:98:d8:3a:eb:cb:8a:08:46:81:69:6a:95:b7:24:02:b1:55: + 3a:cf:0a:18:d5:15:92:77:7d:01:c4:f3:72:65:d9:1a:ef:1c: + dd:87:ab:eb:a3:1b:2e:a3:2c:e8:d9:7f:a9:a7:49:47:83:84: + 99:f7:ea:10:48:6b:3a:4b:be:c4:08:d3:ac:3f:b8:a7:a7:b6: + d6:74:d1:ad:c6:b1:75:42:d8:2b:5e:ee:ed:30:39:0f:f1:2d: + 30:24:1d:3d:46:4b:4b:db:d2:3c:d4:d2:68:ff:d9:29:1e:b4: + 8b:06:e4:c9:02:bd:23:02:36:1f:8d:1e:1e:8f:16:19:e4:17: + 34:8c:e1:a7:a6:25:0b:e8:b0:bd:f7:51:b8:1b:6f:fd:6a:3d: + 6b:09:9d:05:18:ac:77:02:62:bb:91:5a:15:79:d9:11:22:8a: + e9:b7:c3:b4:83:ab:5b:71:25:df:d0:e1:6a:ad:43:dc:5d:cb: + f5:5d:49:2b:53:25:8b:64:f8:33:44:df:d2:44:ec:03:72:32: + da:77:75:cf:67:83:be:3c:6e:75:72:2f:f3:31:39:7f:e3:60: + cb:0e:57:f8 +-----BEGIN CERTIFICATE----- +MIIEsDCCA5igAwIBAgICEAAwDQYJKoZIhvcNAQELBQAweDELMAkGA1UEBhMCVVMx +EzARBgNVBAgMCkNhbGlmb3JuaWExEzARBgNVBAcMCk1lbmxvIFBhcmsxDDAKBgNV +BAoMA09ORjEVMBMGA1UECwwMVGVzdGluZyBPbmx5MRowGAYDVQQDDBFDT1JEIFRl +c3QgUm9vdCBDQTAeFw0xODEyMTQxODI1MTlaFw0xOTEyMTUxODI1MTlaMG8xCzAJ +BgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRMwEQYDVQQHDApNZW5sbyBQ +YXJrMQwwCgYDVQQKDANPTkYxFTATBgNVBAsMDFRlc3RpbmcgT25seTERMA8GA1UE +AwwIeG9zLWNvcmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYS5JR +1WQNAEmyN/tkrs1g5WW3ohHXpMjeFdBhCvb1qO9ofMkpF6XuFGnLqbUk/LuVc0gX +lp3aigrl7vHGLy2JQZcmtPFyGB4CyUjYAlo2qxY/+LKAYn5Ree+p3U8YgumS5zG6 +ZGVARcQXvtJVNI++h19/Gyun5e3Yuc2afxr1FIkxXrW5FKAUC+CkiXDYsSvqdL1B +Au438TS5eKEwW7n8wk2OOdaGalVV++toIAYsHVrNTunZcLtd+Zqc1o1PadQNWihd +anTsnQkN5L7NA3OU00eDJ3fokYjsFUcOXs0FS5xN92wRArVphjnOA/6e3jPNkyZp +WVLygEkIFarePuD/AgMBAAGjggFLMIIBRzAdBgNVHQ4EFgQUMKxdWdf9fUe78e8v +IitL1o5mVGkwgaoGA1UdIwSBojCBn4AUxYhJSu6N6DF7C39G1hAvF7JOC56hfKR6 +MHgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRMwEQYDVQQHDApN +ZW5sbyBQYXJrMQwwCgYDVQQKDANPTkYxFTATBgNVBAsMDFRlc3RpbmcgT25seTEa +MBgGA1UEAwwRQ09SRCBUZXN0IFJvb3QgQ0GCCQCFpsCy+57pVTAJBgNVHRMEAjAA +MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATBJBgNVHREEQjBA +ggh4b3MtY29yZYIQeG9zLWNvcmUuZGVmYXVsdIIieG9zLWNvcmUuZGVmYXVsdC5z +dmMuY2x1c3Rlci5sb2NhbDANBgkqhkiG9w0BAQsFAAOCAQEAFc17uiHweTCKvrkE +0TnYrd4PROtkOdx5fle3KTah3GZ7OG1ViZjYOuvLighGgWlqlbckArFVOs8KGNUV +knd9AcTzcmXZGu8c3Yer66MbLqMs6Nl/qadJR4OEmffqEEhrOku+xAjTrD+4p6e2 +1nTRrcaxdULYK17u7TA5D/EtMCQdPUZLS9vSPNTSaP/ZKR60iwbkyQK9IwI2H40e +Ho8WGeQXNIzhp6YlC+iwvfdRuBtv/Wo9awmdBRisdwJiu5FaFXnZESKK6bfDtIOr +W3El39Dhaq1D3F3L9V1JK1Mli2T4M0Tf0kTsA3Iy2nd1z2eDvjxudXIv8zE5f+Ng +yw5X+A== +-----END CERTIFICATE----- diff --git a/helm-charts/xos-core/requirements.yaml b/helm-charts/xos-core/requirements.yaml new file mode 100644 index 0000000..bfa156f --- /dev/null +++ b/helm-charts/xos-core/requirements.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +dependencies: +- name: xos-db + version: 1.0.1 + repository: file://../xos-db +- name: xos-gui + version: 1.2.4 + repository: file://../xos-gui + condition: xos-gui.enabled diff --git a/helm-charts/xos-core/templates/50-rbac.yaml b/helm-charts/xos-core/templates/50-rbac.yaml new file mode 100644 index 0000000..7e983b4 --- /dev/null +++ b/helm-charts/xos-core/templates/50-rbac.yaml @@ -0,0 +1,35 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubernetes-synchronizer + +... +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: kubernetes-synchronizer-cluster-admin +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: + - kind: ServiceAccount + name: kubernetes-synchronizer + namespace: default diff --git a/helm-charts/xos-core/templates/NOTES.txt b/helm-charts/xos-core/templates/NOTES.txt new file mode 100644 index 0000000..cb50ff5 --- /dev/null +++ b/helm-charts/xos-core/templates/NOTES.txt @@ -0,0 +1,4 @@ +Thank you for installing {{ .Chart.Name }}. + +Your release is named {{ .Release.Name }}. + diff --git a/helm-charts/xos-core/templates/_core.tpl b/helm-charts/xos-core/templates/_core.tpl new file mode 100644 index 0000000..fe59e60 --- /dev/null +++ b/helm-charts/xos-core/templates/_core.tpl @@ -0,0 +1,76 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} + +{{- define "xos-core.config" }} +name: xos-core +xos_dir: /opt/xos +kafka_bootstrap_servers: + - {{ .Values.platformKafka }} +database: + name: {{ .Values.xosDBName | quote }} + username: {{ .Values.xosDBUser | quote }} + password: {{ .Values.xosDBPassword | quote }} +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - {{ .Values.platformKafka }} + topic: xos.log.core + loggers: + '': + handlers: + - console + - file + - kafka + level: {{ .Values.loglevel }} +{{- end }} + +{{- define "xos-core.initial_data" }} +- model: core.Site + fields: + name: {{ .Values.cordSiteName | quote }} + abbreviated_name: {{ .Values.cordSiteName | quote }} + login_base: {{ .Values.cordSiteName | quote }} + site_url: "http://opencord.org/" + hosts_nodes: true + +- model: core.User + fields: + email: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + firstname: {{ .Values.xosAdminFirstname | quote }} + lastname: {{ .Values.xosAdminLastname | quote }} + is_admin: true + relations: + site: + fields: + name: {{ .Values.cordSiteName | quote }} + model: core.Site +{{- end }} + +{{- define "xos-core.ca_cert_chain" }} +{{ (.Files.Get "pki/xos-CA.pem")}} +{{- end }} + diff --git a/helm-charts/xos-core/templates/_helpers.tpl b/helm-charts/xos-core/templates/_helpers.tpl new file mode 100644 index 0000000..f55e3be --- /dev/null +++ b/helm-charts/xos-core/templates/_helpers.tpl @@ -0,0 +1,24 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} + +{{- define "xos-core.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +release: {{ .Release.Name }} +heritage: {{ .Release.Service }} +version: {{ .Chart.Version }} +{{- end }} + diff --git a/helm-charts/xos-core/templates/_tosca.tpl b/helm-charts/xos-core/templates/_tosca.tpl new file mode 100644 index 0000000..98e7d13 --- /dev/null +++ b/helm-charts/xos-core/templates/_tosca.tpl @@ -0,0 +1,43 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} + +{{- define "xos-tosca.config" }} +name: xos-tosca +gprc_endpoint: "xos-core" +local_cert: /usr/local/share/ca-certificates/local_certs.crt +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - {{ .Values.platformKafka }} + topic: xos.log.tosca + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end }} diff --git a/helm-charts/xos-core/templates/chameleon-deployment.yaml b/helm-charts/xos-core/templates/chameleon-deployment.yaml new file mode 100644 index 0000000..a715a98 --- /dev/null +++ b/helm-charts/xos-core/templates/chameleon-deployment.yaml @@ -0,0 +1,37 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: xos-chameleon + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +spec: + replicas: 1 + template: + metadata: + labels: + app: xos-chameleon + spec: + containers: + - name: xos-chameleon + image: {{ .Values.global.registry }}{{ .Values.images.xos_chameleon.repository }}:{{ tpl .Values.images.xos_chameleon.tag . }} + imagePullPolicy: {{ .Values.images.xos_chameleon.pullPolicy }} + command: ["python", "chameleon/chameleon/main.py", "-R", "9101", "-G", "xos-core:50055", "--swagger-url", "/apidocs", "-r"] + ports: + - containerPort: 9101 + port: 9101 + protocol: TCP diff --git a/helm-charts/xos-core/templates/chameleon-service.yaml b/helm-charts/xos-core/templates/chameleon-service.yaml new file mode 100644 index 0000000..97e78c4 --- /dev/null +++ b/helm-charts/xos-core/templates/chameleon-service.yaml @@ -0,0 +1,30 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "xos-chameleon" + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +spec: + type: NodePort + ports: + - port: 9101 + targetPort: 9101 + nodePort: {{ .Values.xos_chameleonNodePort }} + protocol: TCP + selector: + app: "xos-chameleon" diff --git a/helm-charts/xos-core/templates/core-configmap.yaml b/helm-charts/xos-core/templates/core-configmap.yaml new file mode 100644 index 0000000..b9d1e7d --- /dev/null +++ b/helm-charts/xos-core/templates/core-configmap.yaml @@ -0,0 +1,51 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: xos-core + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-core.config" . | indent 4 }} + +... +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: xos-initial-data + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-core.initial_data" . | indent 4 }} + +... +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: ca-certificates + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +data: + chain: | +{{ include "xos-core.ca_cert_chain" . | indent 4 }} + diff --git a/helm-charts/xos-core/templates/core-deployment.yaml b/helm-charts/xos-core/templates/core-deployment.yaml new file mode 100644 index 0000000..a8625e2 --- /dev/null +++ b/helm-charts/xos-core/templates/core-deployment.yaml @@ -0,0 +1,82 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: xos-core + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +spec: + replicas: 1 + template: + metadata: + labels: + app: xos-core + spec: + containers: + - name: xos-core + image: {{ .Values.global.registry }}{{ .Values.images.xos_core.repository }}:{{ tpl .Values.images.xos_core.tag . }} + imagePullPolicy: {{ .Values.images.xos_core.pullPolicy }} + command: ["/bin/bash", "-c", "cd coreapi; ./start_coreapi.sh"] + # command: ["/bin/bash", "-c", "sleep 86400"] + ports: + - containerPort: 50051 + port: 50051 + protocol: TCP + - containerPort: 50055 + port: 50055 + protocol: TCP + volumeMounts: + - name: coreapi-volume + mountPath: /opt/cord_profile + readOnly: true + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: xos-core-config + mountPath: /opt/xos/xos_config.yaml + subPath: config/xos_config.yaml + - name: initial-data-config + mountPath: /opt/xos/core/migrations/initial_data.yaml + subPath: migrations/initial_data.yaml + volumes: + - name: coreapi-volume + secret: + secretName: coreapi-cert-secret + items: + - key: tls.crt + path: core_api_cert.pem + - key: tls.key + path: core_api_key.pem + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: xos-core-config + configMap: + name: xos-core + items: + - key: config + path: config/xos_config.yaml + - name: initial-data-config + configMap: + name: xos-initial-data + items: + - key: config + path: migrations/initial_data.yaml + diff --git a/helm-charts/xos-core/templates/core-grpc-service.yaml b/helm-charts/xos-core/templates/core-grpc-service.yaml new file mode 100644 index 0000000..3d7e8dc --- /dev/null +++ b/helm-charts/xos-core/templates/core-grpc-service.yaml @@ -0,0 +1,37 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "xos-core" + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +spec: + type: NodePort + selector: + app: "xos-core" + ports: + - port: 50051 + targetPort: 50051 + name: secure + nodePort: {{ .Values.xos_core_gRPCSecureNodePort }} + protocol: TCP + - port: 50055 + targetPort: 50055 + name: insecure + nodePort: {{ .Values.xos_core_gRPCInsecureNodePort }} + protocol: TCP + diff --git a/helm-charts/xos-core/templates/core-prometheus-service.yaml b/helm-charts/xos-core/templates/core-prometheus-service.yaml new file mode 100644 index 0000000..5d3e57f --- /dev/null +++ b/helm-charts/xos-core/templates/core-prometheus-service.yaml @@ -0,0 +1,31 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "xos-core-prometheus" + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +spec: + type: NodePort + selector: + app: "xos-core" + ports: + - port: 8000 + targetPort: 8000 + name: prometheus + nodePort: {{ .Values.xos_prometheusNodePort }} + protocol: TCP diff --git a/helm-charts/xos-core/templates/core-secrets.yaml b/helm-charts/xos-core/templates/core-secrets.yaml new file mode 100644 index 0000000..9d5a7c5 --- /dev/null +++ b/helm-charts/xos-core/templates/core-secrets.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: xos-admin-passwd-secret + namespace: default +type: Opaque +data: + password: {{ .Values.xosAdminPassword | b64enc }} + diff --git a/helm-charts/xos-core/templates/coreapi-cert-secret.yaml b/helm-charts/xos-core/templates/coreapi-cert-secret.yaml new file mode 100644 index 0000000..b70cba6 --- /dev/null +++ b/helm-charts/xos-core/templates/coreapi-cert-secret.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: coreapi-cert-secret + namespace: default +type: kubernetes.io/tls +data: + tls.crt: {{ .Files.Get "pki/xos-core.pem" | b64enc }} + tls.key: {{ .Files.Get "pki/xos-core.key" | b64enc }} diff --git a/helm-charts/xos-core/templates/tests/test-xos-core-api.yaml b/helm-charts/xos-core/templates/tests/test-xos-core-api.yaml new file mode 100644 index 0000000..1162de0 --- /dev/null +++ b/helm-charts/xos-core/templates/tests/test-xos-core-api.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: "{{ .Release.Name }}-api-test" + labels: + {{- include "xos-core.release_labels" . | indent 4 }} + annotations: + "helm.sh/hook": test-success +spec: + restartPolicy: Never + containers: + - name: {{ .Release.Name }}-api-test + image: {{ .Values.global.registry }}{{ .Values.images.xos_api_tester.repository }}:{{ tpl .Values.images.xos_api_tester.tag . }} + imagePullPolicy: {{ .Values.images.xos_api_tester.pullPolicy }} + volumeMounts: + - name: log-volume + mountPath: /src/cord-api/Tests/Log/ + env: + - name: SERVER_IP + value: 'xos-chameleon' + - name: SERVER_PORT + value: '9101' + - name: SITE_NAME + value: {{ .Values.cordSiteName | quote }} + - name: XOS_USER + value: {{ .Values.xosAdminUser | quote }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + command: ["pybot", "-L", "TRACE", "-d", "Log", "-T", "Ch_DeploymentTest.txt", "Ch_SiteTest.txt", "Ch_UsersTest.txt", "Ch_SliceTest.txt", "Ch_ServiceTest.txt"] + volumes: + - name: log-volume + hostPath: + path: /tmp/helm_test_xos_core_logs_{{ dateInZone "20060102T030405.00Z" (now) "UTC" }} + type: DirectoryOrCreate diff --git a/helm-charts/xos-core/templates/tosca-configmap.yaml b/helm-charts/xos-core/templates/tosca-configmap.yaml new file mode 100644 index 0000000..6269be3 --- /dev/null +++ b/helm-charts/xos-core/templates/tosca-configmap.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: xos-tosca + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-tosca.config" . | indent 4 }} diff --git a/helm-charts/xos-core/templates/tosca-deployment.yaml b/helm-charts/xos-core/templates/tosca-deployment.yaml new file mode 100644 index 0000000..c6f8376 --- /dev/null +++ b/helm-charts/xos-core/templates/tosca-deployment.yaml @@ -0,0 +1,56 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: xos-tosca + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +spec: + replicas: 1 + template: + metadata: + labels: + app: xos-tosca + spec: + containers: + - name: xos-tosca + image: {{ .Values.global.registry }}{{ .Values.images.xos_tosca.repository }}:{{ tpl .Values.images.xos_tosca.tag . }} + imagePullPolicy: {{ .Values.images.xos_tosca.pullPolicy }} + ports: + - containerPort: 9102 + port: 9102 + protocol: TCP + volumeMounts: + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: xos-tosca-config + mountPath: /opt/xos-tosca/src/xos-tosca.config.yaml + subPath: config/xos-tosca.config.yaml + volumes: + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: xos-tosca-config + configMap: + name: xos-tosca + items: + - key: config + path: config/xos-tosca.config.yaml diff --git a/helm-charts/xos-core/templates/tosca-service.yaml b/helm-charts/xos-core/templates/tosca-service.yaml new file mode 100644 index 0000000..4c70119 --- /dev/null +++ b/helm-charts/xos-core/templates/tosca-service.yaml @@ -0,0 +1,30 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "xos-tosca" + labels: + {{- include "xos-core.release_labels" . | indent 4 }} +spec: + type: NodePort + ports: + - port: 9102 + targetPort: 9102 + nodePort: {{ .Values.xos_toscaNodePort }} + protocol: TCP + selector: + app: "xos-tosca" diff --git a/helm-charts/xos-core/values.yaml b/helm-charts/xos-core/values.yaml new file mode 100644 index 0000000..3bd9df5 --- /dev/null +++ b/helm-charts/xos-core/values.yaml @@ -0,0 +1,82 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# Docker images +# YAML variable names can't contain `-`, so substituted with `_` +images: + xos_core: + repository: 'xosproject/xos-core' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + xos_chameleon: + repository: 'xosproject/chameleon' + tag: '3.3.0' + pullPolicy: 'Always' + + xos_tosca: + repository: 'xosproject/xos-tosca' + tag: '1.3.0' + pullPolicy: 'Always' + + xos_api_tester: + repository: 'xosproject/xos-api-tester' + tag: 'master' + pullPolicy: 'Always' + +global: + registry: "" + +loglevel: "DEBUG" + +# NodePorts +xos_chameleonNodePort: 30006 +xos_toscaNodePort: 30007 +xos_prometheusNodePort: 30009 +xos_core_gRPCSecureNodePort: 30010 +xos_core_gRPCInsecureNodePort: 30011 + +# kafka +platformKafka: cord-kafka:9092 + +# XOS Admin username/password +xosAdminUser: 'admin@opencord.org' +xosAdminPassword: 'letmein' +xosAdminFirstname: 'XOS' +xosAdminLastname: 'Admin' + +# CORD site names +cordSiteName: mysite + +# Database name/username/password for XOS and the xos-db subchart +xosDBName: 'xos' +xosDBUser: 'postgres' +xosDBPassword: 'password' + +xos-db: + xosDBName: 'xos' + xosDBUser: 'postgres' + xosDBPassword: 'password' + +# Certificates can be regenerated with scripts/pki/Makefile +# Created on: Fri Dec 14 16:46:00 UTC 2018, good for 366 days +ca_cert_chain: | + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQxakNDQXI2Z0F3SUJBZ0lKQUpsNGd5bGtZUi9zTUEwR0NTcUdTSWIzRFFFQkN3VUFNSGd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlEQXBEWVd4cFptOXlibWxoTVJNd0VRWURWUVFIREFwTlpXNXNieUJRWVhKcgpNUXd3Q2dZRFZRUUtEQU5QVGtZeEZUQVRCZ05WQkFzTURGUmxjM1JwYm1jZ1QyNXNlVEVhTUJnR0ExVUVBd3dSClEwOVNSQ0JVWlhOMElGSnZiM1FnUTBFd0hoY05NVGd4TWpFME1UWTBOakF3V2hjTk1Ua3hNakUxTVRZME5qQXcKV2pCNE1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQXdLUTJGc2FXWnZjbTVwWVRFVE1CRUdBMVVFQnd3SwpUV1Z1Ykc4Z1VHRnlhekVNTUFvR0ExVUVDZ3dEVDA1R01SVXdFd1lEVlFRTERBeFVaWE4wYVc1bklFOXViSGt4CkdqQVlCZ05WQkFNTUVVTlBVa1FnVkdWemRDQlNiMjkwSUVOQk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0MKQVE4QU1JSUJDZ0tDQVFFQXlmdXJic3lHNC9NL1o1Y0x1a1drNU84ZjVTemxQY21md20rek11NTFtRlloU05hTgpiRkFic0FReFZqallvbTB1TEUxdjZsTlZuWGkxVzQySG9tM0c3ZFgyb1NEZ0loUXloS29jRkh0WlNGS0o0RWF1CmJsUXhXUzFaQ1VZSFpINUdMVmMxWUNMUHhUbFdndnlGSnVZUk9LZElaWXloT1ZORHY2RHlIN1cwQmsva1M5MEEKamhkZ3h3U0dJcldsS2FveGhjSG01R0ErenZiRnBOYUx1T201aFNDWHlpRnVSdHd1bXV5YlJMalNyUC9jUjF3OAorZjMvejkvQlZXTEdZMVBTN1RvSENUTk5veHNXUVNHQ1piVUlzUVpiSXhDSXNPVUJkbGxDWkRmYnErSUROaXErCnI3dTByVC9Tamh5WVdCcmkrcFNzc0lGdWNwcmhvOHJnZVJyMVpRSURBUUFCbzJNd1lUQWRCZ05WSFE0RUZnUVUKRlNrQmxkdXF5R0hibGhJMUdHV0NEV1NPNXRvd0h3WURWUjBqQkJnd0ZvQVVGU2tCbGR1cXlHSGJsaEkxR0dXQwpEV1NPNXRvd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUNBWVl3RFFZSktvWklodmNOCkFRRUxCUUFEZ2dFQkFEazNCbVNmbUFpQ3dCZENRRHNodTViZWpQWStnckxNanROdkcxSXNqMUtRZHlpMmF6SGQKYUN0TW5LODdDbmJubDNlNzErcEx4aFJablcwQkFFeUxMNG9NOFYvR1kvcG9SSG45cWV1bGJtRTNqWkF2bTE0VAp5YUJhQXpzYTNDOTBUZkZEZG1WU1lPTWFocEM3Q2IvN01TZldkWFBXL3lLdkpZYzZCdUVvcVNUNE5ZeVBSVmNuCmdwUXp3dU9CMEN6dGMySHU2MDRFNTRRT05GOVl2aW5WYU9zVmFvQTJRQzJTemZtSlUzTWtnWm5HMTAvd0hlZEYKWk4wbUthSk1mMHpwWHI2MU5pOTVZc2pONmJnaVY1aExwZDBYUXBVTXpXVzRFZ0xEbjZyeFNjejcwRWh6SW1aRwpVbG40T20ybnMxSXR4NDE3RGtXbUp1cGRIY1U1d0w4MkZ4Yz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= +secrets: + core_api_cert: | + Q2VydGlmaWNhdGU6CiAgICBEYXRhOgogICAgICAgIFZlcnNpb246IDMgKDB4MikKICAgICAgICBTZXJpYWwgTnVtYmVyOiA0MDk2ICgweDEwMDApCiAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgogICAgICAgIElzc3VlcjogQz1VUywgU1Q9Q2FsaWZvcm5pYSwgTD1NZW5sbyBQYXJrLCBPPU9ORiwgT1U9VGVzdGluZyBPbmx5LCBDTj1DT1JEIFRlc3QgUm9vdCBDQQogICAgICAgIFZhbGlkaXR5CiAgICAgICAgICAgIE5vdCBCZWZvcmU6IERlYyAxNCAxNjo0NjowMCAyMDE4IEdNVAogICAgICAgICAgICBOb3QgQWZ0ZXIgOiBEZWMgMTUgMTY6NDY6MDAgMjAxOSBHTVQKICAgICAgICBTdWJqZWN0OiBDPVVTLCBTVD1DYWxpZm9ybmlhLCBMPU1lbmxvIFBhcmssIE89T05GLCBPVT1UZXN0aW5nIE9ubHksIENOPXhvcy1jb3JlCiAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CiAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCiAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMjA0OCBiaXQpCiAgICAgICAgICAgICAgICBNb2R1bHVzOgogICAgICAgICAgICAgICAgICAgIDAwOmFmOjFiOmRlOjZmOmQ2OjE0OjMyOmQwOjI2OjEzOmM2OjhlOmQ0OjRhOgogICAgICAgICAgICAgICAgICAgIDMzOmNjOjdjOmJhOmVkOmE0Ojg0OjNhOjRiOmJjOmZkOmNiOjFkOjkxOjQzOgogICAgICAgICAgICAgICAgICAgIGUzOmFjOmZiOjBmOjVjOjM5OmI5OjhlOmEzOjU1OjgxOjhhOjUzOjJhOjUxOgogICAgICAgICAgICAgICAgICAgIDE2OjQ2OjIzOmMwOjFmOjIwOmE3OjkxOjY1OmY1OjZjOjM2OmM1OjY0OjhmOgogICAgICAgICAgICAgICAgICAgIGRlOjE0OjMwOjg1OjMzOmM3OjY1OjliOjZkOmE1Ojg2OjU2OjdjOjk0OmZhOgogICAgICAgICAgICAgICAgICAgIGNkOjNkOjIxOjBmOjYwOjBlOjRhOjhjOjdkOmNkOjhkOjQ4OmI0OmRmOjM2OgogICAgICAgICAgICAgICAgICAgIGIyOjgyOjE4Ojg0OjNmOjU3OjQxOmY3OjM0OjA2OjI1OmQwOmI2OjUzOjVhOgogICAgICAgICAgICAgICAgICAgIDgwOmMwOjJhOmZkOmVhOmYyOmM2OmJhOmRmOjc3OjdhOjlhOjIzOjEwOmU3OgogICAgICAgICAgICAgICAgICAgIDlkOjRjOmQ5OmM3OjIxOjBkOjhjOjk4OmJhOmI5OmIyOjQzOmI2OmEwOjRjOgogICAgICAgICAgICAgICAgICAgIDQyOjYyOmZiOjNlOmZkOmY4OjcxOmY4OmUxOjY5OjFhOjk1OjY2OmVkOjQxOgogICAgICAgICAgICAgICAgICAgIGIyOjYyOmVmOjJmOmFkOjA2OjJkOmIwOjQ4OmM2OmJkOmViOmQ2OjlmOmZlOgogICAgICAgICAgICAgICAgICAgIGFjOjEyOmUyOjU4OmQzOmFhOmQyOjdkOjU0OmRlOjc1OjkyOmVhOjllOjFhOgogICAgICAgICAgICAgICAgICAgIDk3OjdiOjAzOjY4OjJjOjEyOjA1OmI1OmQ5OmE1OjMwOmRkOjhhOjk5OmI0OgogICAgICAgICAgICAgICAgICAgIDhkOmE3OjcyOjEwOmYzOmQ5OjljOjg2OmRkOjA5OmI2OmQwOjgyOjQyOjMwOgogICAgICAgICAgICAgICAgICAgIDZkOmNiOmQzOjZhOmI5OjMzOmM2OjM5OmFiOmNhOjhmOmJhOjM0OjJiOmZiOgogICAgICAgICAgICAgICAgICAgIDM2OjQ2Ojc0OmVlOjMwOmVlOjhhOmE4OjJlOjJjOjVmOmM4OjhlOmM5OjkzOgogICAgICAgICAgICAgICAgICAgIGIyOjMwOjJlOmIwOjI2OjQ3Ojg4OjBjOmE5OjE0OjBjOjc4OjAyOjY3OjBjOgogICAgICAgICAgICAgICAgICAgIGFkOmFiCiAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCiAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CiAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKICAgICAgICAgICAgICAgIDkyOjZEOkMwOkU5OjNFOjk5OkNEOkE1OkE0OkM5Ojk1OkIwOkE0OjE1OjE4OkI3OkNBOjFGOkIxOjg3CiAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAogICAgICAgICAgICAgICAga2V5aWQ6MTU6Mjk6MDE6OTU6REI6QUE6Qzg6NjE6REI6OTY6MTI6MzU6MTg6NjU6ODI6MEQ6NjQ6OEU6RTY6REEKICAgICAgICAgICAgICAgIERpck5hbWU6L0M9VVMvU1Q9Q2FsaWZvcm5pYS9MPU1lbmxvIFBhcmsvTz1PTkYvT1U9VGVzdGluZyBPbmx5L0NOPUNPUkQgVGVzdCBSb290IENBCiAgICAgICAgICAgICAgICBzZXJpYWw6OTk6Nzg6ODM6Mjk6NjQ6NjE6MUY6RUMKCiAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCiAgICAgICAgICAgICAgICBDQTpGQUxTRQogICAgICAgICAgICBYNTA5djMgS2V5IFVzYWdlOiBjcml0aWNhbAogICAgICAgICAgICAgICAgRGlnaXRhbCBTaWduYXR1cmUsIEtleSBFbmNpcGhlcm1lbnQKICAgICAgICAgICAgWDUwOXYzIEV4dGVuZGVkIEtleSBVc2FnZTogCiAgICAgICAgICAgICAgICBUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbgogICAgICAgICAgICBYNTA5djMgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lOiAKICAgICAgICAgICAgICAgIEROUzp4b3MtY29yZSwgRE5TOnhvcy1jb3JlLmRlZmF1bHQsIEROUzp4b3MtY29yZS5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgogICAgICAgICBhNTo0MzpmNToyMzozNjpjNDo5MjozMDpiZjowMToxZTphYjo2MTphZDpmZTpiNDo2Yjo5ZjoKICAgICAgICAgODg6YmI6Y2Y6YWU6ZTE6OGE6NTI6MDQ6ODI6NzI6MWM6M2M6ZWI6Mjk6YTU6NTY6NzA6YzI6CiAgICAgICAgIDk3OjEzOjY5OjM1OjVlOmZiOjRlOmMyOmUzOmI2OjQ1OmJhOjEwOjdiOmUxOjRjOmU2OjkwOgogICAgICAgICA1ZTo0MjoyODo3YjpjNDowMzoxNTo3Mjo1MDowMTo3Yjo3NzpjYzo1NDo1Zjo0Yzo4NDpmZjoKICAgICAgICAgY2M6NjM6YzA6ODM6YTc6YTc6YmU6YmU6YTI6N2U6YjE6ZmU6ZmI6OWY6YWY6ZjU6NDQ6YmE6CiAgICAgICAgIDBjOjczOmJlOjYyOmFlOmFiOmZiOmFmOjJjOjAyOmRjOjFmOjc5OjMzOmFlOmMzOjUzOmE0OgogICAgICAgICBkNDo3YTplYzplMzozYjowMTo3Mjo5YTo1ZTo4NzowZjpiNDo2Yjo0Mjo0ODo4ZjpiYTozZjoKICAgICAgICAgZDc6Nzk6YzE6OTk6MTA6NTM6MmY6ODU6MzY6OTY6NmI6NWI6MWY6ZTg6OTE6NTQ6ZDA6ZWM6CiAgICAgICAgIDdmOjk0OmM3Ojg4OjVlOmZmOjBiOjYzOjIzOmJkOmY2OjA3OjhlOmY4OmQ5OjhkOmUxOmIyOgogICAgICAgICBiNzowYzoxNzpkNDo0ZTpmNDpmZjo3ZDpiZDpiMTowNToxODo0MDplZDo2NTpmMTpkZTpmYzoKICAgICAgICAgNzU6OWU6Mjk6YWQ6YTk6NzE6ZWY6NjQ6NTI6Yzg6NWM6ODE6MmQ6NDM6M2Q6Mzk6Yzg6OTI6CiAgICAgICAgIGZlOjMwOmJlOmM1OjIxOmY5OmJlOmNhOmQ0OmFhOjI2Ojk5OmEwOjdjOmNhOmVjOjQzOmI1OgogICAgICAgICAyYjo0YzphMTowMjpjMzo4NzpiYzozNTphYzpkODpiZjplMzo5MDo4Mjo0Mzo5NDphZTplZDoKICAgICAgICAgM2I6MDM6ZWI6NjY6ODk6ZGI6ZDM6MTk6ZTA6NmE6YjA6Njc6MTQ6Zjk6NDQ6NjQ6ODk6MTQ6CiAgICAgICAgIGI1OmZjOmVkOjY0Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFc0RDQ0E1aWdBd0lCQWdJQ0VBQXdEUVlKS29aSWh2Y05BUUVMQlFBd2VERUxNQWtHQTFVRUJoTUNWVk14CkV6QVJCZ05WQkFnTUNrTmhiR2xtYjNKdWFXRXhFekFSQmdOVkJBY01DazFsYm14dklGQmhjbXN4RERBS0JnTlYKQkFvTUEwOU9SakVWTUJNR0ExVUVDd3dNVkdWemRHbHVaeUJQYm14NU1Sb3dHQVlEVlFRRERCRkRUMUpFSUZSbApjM1FnVW05dmRDQkRRVEFlRncweE9ERXlNVFF4TmpRMk1EQmFGdzB4T1RFeU1UVXhOalEyTURCYU1HOHhDekFKCkJnTlZCQVlUQWxWVE1STXdFUVlEVlFRSURBcERZV3hwWm05eWJtbGhNUk13RVFZRFZRUUhEQXBOWlc1c2J5QlEKWVhKck1Rd3dDZ1lEVlFRS0RBTlBUa1l4RlRBVEJnTlZCQXNNREZSbGMzUnBibWNnVDI1c2VURVJNQThHQTFVRQpBd3dJZUc5ekxXTnZjbVV3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3ZHOTV2CjFoUXkwQ1lUeG83VVNqUE1mTHJ0cElRNlM3ejl5eDJSUStPcyt3OWNPYm1PbzFXQmlsTXFVUlpHSThBZklLZVIKWmZWc05zVmtqOTRVTUlVengyV2JiYVdHVm55VStzMDlJUTlnRGtxTWZjMk5TTFRmTnJLQ0dJUS9WMEgzTkFZbAowTFpUV29EQUt2M3E4c2E2MzNkNm1pTVE1NTFNMmNjaERZeVl1cm15UTdhZ1RFSmkrejc5K0hINDRXa2FsV2J0ClFiSmk3eSt0Qmkyd1NNYTk2OWFmL3F3UzRsalRxdEo5Vk41MWt1cWVHcGQ3QTJnc0VnVzEyYVV3M1lxWnRJMm4KY2hEejJaeUczUW0yMElKQ01HM0wwMnE1TThZNXE4cVB1alFyK3paR2RPNHc3b3FvTGl4ZnlJN0prN0l3THJBbQpSNGdNcVJRTWVBSm5ESzJyQWdNQkFBR2pnZ0ZMTUlJQlJ6QWRCZ05WSFE0RUZnUVVrbTNBNlQ2WnphV2t5Wld3CnBCVVl0OG9mc1ljd2dhb0dBMVVkSXdTQm9qQ0JuNEFVRlNrQmxkdXF5R0hibGhJMUdHV0NEV1NPNXRxaGZLUjYKTUhneEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlEQXBEWVd4cFptOXlibWxoTVJNd0VRWURWUVFIREFwTgpaVzVzYnlCUVlYSnJNUXd3Q2dZRFZRUUtEQU5QVGtZeEZUQVRCZ05WQkFzTURGUmxjM1JwYm1jZ1QyNXNlVEVhCk1CZ0dBMVVFQXd3UlEwOVNSQ0JVWlhOMElGSnZiM1FnUTBHQ0NRQ1plSU1wWkdFZjdEQUpCZ05WSFJNRUFqQUEKTUE0R0ExVWREd0VCL3dRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUZCUWNEQVRCSkJnTlZIUkVFUWpCQQpnZ2g0YjNNdFkyOXlaWUlRZUc5ekxXTnZjbVV1WkdWbVlYVnNkSUlpZUc5ekxXTnZjbVV1WkdWbVlYVnNkQzV6CmRtTXVZMngxYzNSbGNpNXNiMk5oYkRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXBVUDFJemJFa2pDL0FSNnIKWWEzK3RHdWZpTHZQcnVHS1VnU0NjaHc4NnltbFZuRENseE5wTlY3N1RzTGp0a1c2RUh2aFRPYVFYa0lvZThRRApGWEpRQVh0M3pGUmZUSVQvekdQQWc2ZW52cjZpZnJIKys1K3Y5VVM2REhPK1lxNnIrNjhzQXR3ZmVUT3V3MU9rCjFIcnM0enNCY3BwZWh3KzBhMEpJajdvLzEzbkJtUkJUTDRVMmxtdGJIK2lSVk5Ec2Y1VEhpRjcvQzJNanZmWUgKanZqWmplR3l0d3dYMUU3MC8zMjlzUVVZUU8xbDhkNzhkWjRwcmFseDcyUlN5RnlCTFVNOU9jaVMvakMreFNINQp2c3JVcWlhWm9Ieks3RU8xSzB5aEFzT0h2RFdzMkwvamtJSkRsSzd0T3dQclpvbmIweG5nYXJCbkZQbEVaSWtVCnRmenRaQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + core_api_key: | + LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcGdJQkFBS0NBUUVBcnh2ZWI5WVVNdEFtRThhTzFFb3p6SHk2N2FTRU9rdTgvY3Nka1VQanJQc1BYRG01CmpxTlZnWXBUS2xFV1JpUEFIeUNua1dYMWJEYkZaSS9lRkRDRk04ZGxtMjJsaGxaOGxQck5QU0VQWUE1S2pIM04KalVpMDN6YXlnaGlFUDFkQjl6UUdKZEMyVTFxQXdDcjk2dkxHdXQ5M2Vwb2pFT2VkVE5uSElRMk1tTHE1c2tPMgpvRXhDWXZzKy9maHgrT0ZwR3BWbTdVR3lZdTh2clFZdHNFakd2ZXZXbi82c0V1SlkwNnJTZlZUZWRaTHFuaHFYCmV3Tm9MQklGdGRtbE1OMkttYlNOcDNJUTg5bWNodDBKdHRDQ1FqQnR5OU5xdVRQR09hdktqN28wSy9zMlJuVHUKTU82S3FDNHNYOGlPeVpPeU1DNndKa2VJREtrVURIZ0Nad3l0cXdJREFRQUJBb0lCQVFDaHhmdHdFclZDWkc1cApJcTFkanRmZitQT3hES1prUFFoeTU2MS9RTnNjT2kxc3BKKzdHVWFya0tGWW5PVVpFM293eDdoSGFZeWMxdFR5CkhMK3NvMDdNRVZEYmtTYTB2ejRGWE5jenZGRTZDcm53cFdDN1FBcHBsVnpCTitrbG8zVjc3Z0luK1hRWCthcXMKM29zSy9oTi9IV2lDU2RoUGk4c1U3clU2NGd1Y0pJNkhnK2lnMlFYWTk0bWFjVHJhVkhOMWtSd0RjYnFLbDhsVwpoUTlSTjNROXpQdFF3OUxGd0xHNGN1VkNtZ09XOW9LeE9weTVjM2hoNGhPL0ZVMEQzOU00eVhmcFJBQ1hzYzhmCmNXMjRaSC9pQzZ2bXVjNEtGejlsaWVmT1hnMy9LVWtJTzgzNkJxNGk1K3Jjc0Y2QS9ucllPV2VKYmZnL2dpR1UKWGV6OXdOcEJBb0dCQU5rNDUxeTV2NVJsYmtmN2VJNzA4NXBtM3JJeTZodkFXUktBRTZ5UWJra0dqa2pkSWZndgp5QjhtdXd4NXpDeXo1Mzl2WjhYVUhIeC9KbkR3UkRlc0NRMlZKSG5Qd1NocFE3ZmNXVDJrWEFkQTdDUDlFcUpwCkpDekZiaFZPTHVlakRGMTdFVGJvU0JOdU9mc0dNWmV1WFhCMzZ6VFJURFh4bzdrR2lkekpFeFM3QW9HQkFNNWUKWCtUUGNydUhkYnVZWnZ4WUZORk9kb3B0UHhUMnJ3YlpkS3lVb2dFM1ZLY2w5MUVlVHMwRHdYTmZLWE1JQ3cybgo3SFUwNEJqVjFJd3FzVFRqMVh0SUhBVHA5elQwV1FkNXgwUUVwUkhXenlSdHduWkpTbGJ3K2NGZFNrU1NnamNpCnlvY1puUE9jNzRKSWphaC9uRUlkUDZicnkzNG9NK3VWTjU1aVRyUFJBb0dCQU5oakZDN05wcWZvUnV5VCtHdkkKWGFjdzFLVUZqU3FwK05FeUh1Y25WWVdQYjB2c1pUdDhOY202WmxpdU9CTkwvODkxcGhWdkVCV0JBRVUvUTJXRwpEZHFtK0pnVHVtSk1RalkwM2YxRzdwb1hOV1ZBWkVDL3BsYW5NZHN0Y0JJMTNVcCtIdzdvWTJ4ZndJaHNpaGlFCmpQWk5yMU9GTDNzSlJNUTdYRGhCWWEyakFvR0JBSTgveTJqVTUxdHRLRGhVRGdqVVMzOE83QklpeTBzT0FXakwKd2NXYVZ1cHBNZ1hrd013Nk1aRDJMbTZiZS9ZeGV4cTdtZE95Skd5WTRiVjZYUS9OcHY2d2kyS04xZCtZVGNSMgpyKzl6R2ZKTUhmVzNpdWo0N3ZWeXlLdUV5bXpYRmpTWG5lWXh6VlQ5ZHZRRTBQQkp4SG5RTzhMdW9vNnI4WDV5ClVlMUxhRDVCQW9HQkFLVjJkYWJvWTBpeUtyOXFDV0NXZ3pjOFpuc0FEdHoyYzZ2Z2lUTXpUeDNNamdPb1d5TXMKWnRUUy94OW1Sei9CZUJnNWhNRCszS0ZoUzNsd1RUZ2xWYUI2NjFQUWZ6Tm1sZXJoQUtXV3pFV3lkelVISzM3dQpUS0hjb01PMUdmWU9mUjVFMWZKNWNWNGlFSTVPVU9rTGtMR0RjZ2lFcUJjck9kRThkeGYxY3NlLwotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= + diff --git a/helm-charts/xos-db/Chart.yaml b/helm-charts/xos-db/Chart.yaml new file mode 100644 index 0000000..9553ed9 --- /dev/null +++ b/helm-charts/xos-db/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: xos-db +version: 1.0.1 + +icon: https://www.postgresql.org/media/img/about/press/elephant.png + +# Postgres container from: https://hub.docker.com/_/postgres/ +appVersion: '10.3-alpine' diff --git a/helm-charts/xos-db/templates/_helpers.tpl b/helm-charts/xos-db/templates/_helpers.tpl new file mode 100644 index 0000000..1244611 --- /dev/null +++ b/helm-charts/xos-db/templates/_helpers.tpl @@ -0,0 +1,33 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} + +{{- define "xos-db.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +release: {{ .Release.Name }} +heritage: {{ .Release.Service }} +version: {{ .Chart.Version }} +{{- end }} + +{{- define "xos-db.postgresql-conf" }} + +listen_addresses = '*' + +# as per https://github.com/kubernetes/kubernetes/issues/71233 +huge_pages = off # on, off, or try + +{{- end }} + diff --git a/helm-charts/xos-db/templates/_persist.tpl b/helm-charts/xos-db/templates/_persist.tpl new file mode 100644 index 0000000..ee6fb9b --- /dev/null +++ b/helm-charts/xos-db/templates/_persist.tpl @@ -0,0 +1,30 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} +{{- define "xos-db.persistent-volume-claim" }} +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ .Values.pvClaimName }} +spec: + accessModes: + - ReadWriteOnce + storageClassName: {{ .Values.storageClassName }} + resources: + requests: + storage: 1Gi +{{- end }} + diff --git a/helm-charts/xos-db/templates/db-configmap.yaml b/helm-charts/xos-db/templates/db-configmap.yaml new file mode 100644 index 0000000..af03cf5 --- /dev/null +++ b/helm-charts/xos-db/templates/db-configmap.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: xos-db + labels: + {{- include "xos-db.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-db.postgresql-conf" . | indent 4 }} diff --git a/helm-charts/xos-db/templates/db-deployment.yaml b/helm-charts/xos-db/templates/db-deployment.yaml new file mode 100644 index 0000000..4f0bee6 --- /dev/null +++ b/helm-charts/xos-db/templates/db-deployment.yaml @@ -0,0 +1,68 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: xos-db + labels: + app: xos-db +spec: + replicas: 1 + template: + metadata: + labels: + app: xos-db + spec: + containers: + - name: xos-db + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 5432 + protocol: TCP + env: + - name: POSTGRES_DB + value: {{ .Values.xosDBName | quote }} + - name: POSTGRES_USER + value: {{ .Values.xosDBUser | quote }} + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: xos-db-secrets + key: password + - name: PGDATA + value: "/var/lib/postgresql/data/pgdata" + volumeMounts: + - name: xos-db-config + mountPath: /usr/local/share/postgresql/postgresql.conf.sample + subPath: config/postgresql.conf.sample +{{- if .Values.needDBPersistence }} + - name: db-pv-storage + mountPath: "/var/lib/postgresql/data" +{{- end }} + volumes: + - name: xos-db-config + configMap: + name: xos-db + items: + - key: config + path: config/postgresql.conf.sample +{{- if .Values.needDBPersistence }} + - name: db-pv-storage + persistentVolumeClaim: + claimName: {{ .Values.pvClaimName }} +{{- include "xos-db.persistent-volume-claim" . }} +{{- end }} diff --git a/helm-charts/xos-db/templates/db-secrets.yaml b/helm-charts/xos-db/templates/db-secrets.yaml new file mode 100644 index 0000000..9f41343 --- /dev/null +++ b/helm-charts/xos-db/templates/db-secrets.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: xos-db-secrets + namespace: default +type: Opaque +data: + password: {{ .Values.xosDBPassword | b64enc }} diff --git a/helm-charts/xos-db/templates/db-service.yaml b/helm-charts/xos-db/templates/db-service.yaml new file mode 100644 index 0000000..fe8f3b7 --- /dev/null +++ b/helm-charts/xos-db/templates/db-service.yaml @@ -0,0 +1,29 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "xos-db" + labels: + {{- include "xos-db.release_labels" . | indent 4 }} +spec: + type: ClusterIP + selector: + app: "xos-db" + ports: + - port: 5432 + targetPort: 5432 + protocol: TCP diff --git a/helm-charts/xos-db/values.yaml b/helm-charts/xos-db/values.yaml new file mode 100644 index 0000000..8428769 --- /dev/null +++ b/helm-charts/xos-db/values.yaml @@ -0,0 +1,34 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# XOS Postgres database related values + +image: + repository: 'postgres' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +# Database name/username/password +xosDBName: 'xos' +xosDBUser: 'postgres' +xosDBPassword: 'password' + +# DB persistence related vars +needDBPersistence: false +pvClaimName: xosdb-pv-claim +storageClassName: "" diff --git a/helm-charts/xos-gui/.helmignore b/helm-charts/xos-gui/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-gui/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-gui/Chart.yaml b/helm-charts/xos-gui/Chart.yaml new file mode 100644 index 0000000..22afb38 --- /dev/null +++ b/helm-charts/xos-gui/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +name: xos-gui +description: Web GUI for XOS +icon: https://guide.opencord.org/logos/xos.svg +version: 1.2.4 + +# appVersion is of the xos-gui container, xos-ws tag is specified in values.yaml +appVersion: 1.0.5 diff --git a/helm-charts/xos-gui/templates/_helpers.tpl b/helm-charts/xos-gui/templates/_helpers.tpl new file mode 100644 index 0000000..74a28cc --- /dev/null +++ b/helm-charts/xos-gui/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} + +{{- define "xos-gui.release_labels" }} +app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +release: {{ .Release.Name }} +heritage: {{ .Release.Service }} +version: {{ .Chart.Version }} +{{- end }} + +{{- define "xos-gui.app_config" }} +angular.module('app') +.constant('AppConfig', { + apiEndpoint: '/xosapi/v1', + websocketClient: '/' +}); +{{- end }} + +{{- define "xos-gui.style_config" }} +angular.module('app') +.constant('StyleConfig', { + projectName: {{ .Values.xos_projectName | quote }}, + favicon: 'cord-favicon.png', + background: 'cord-bg.jpg', + payoff: 'Your VNF orchestrator', + logo: 'cord-logo.png', + routes: [ + { + label: 'Slices', + state: 'xos.core.slice', + }, + { + label: 'Nodes', + state: 'xos.core.node', + }, + { + label: 'Instances', + state: 'xos.core.instance', + }, + ] +}); +{{- end }} + +{{- define "xos-gui.cord_version" }} +{ + "version": {{ .Values.cord_version | quote }} +} +{{- end }} diff --git a/helm-charts/xos-gui/templates/_ws.tpl b/helm-charts/xos-gui/templates/_ws.tpl new file mode 100644 index 0000000..0975fe0 --- /dev/null +++ b/helm-charts/xos-gui/templates/_ws.tpl @@ -0,0 +1,26 @@ +{{- /* +Copyright 2017-present Open Networking Foundation + +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. +*/ -}} + +{{- define "xos-ws.gateway_config" }} +default: + kafka_bootstrap_servers: {{ .Values.platformKafka | quote }} + xos: + host: xost + port: 9000 + gateway: + port: 3000 +{{- end }} + diff --git a/helm-charts/xos-gui/templates/gui-configmap.yaml b/helm-charts/xos-gui/templates/gui-configmap.yaml new file mode 100644 index 0000000..16d588c --- /dev/null +++ b/helm-charts/xos-gui/templates/gui-configmap.yaml @@ -0,0 +1,51 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: gui-app-config + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-gui.app_config" . | indent 4 }} + +... +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: gui-style-config + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-gui.style_config" . | indent 4 }} + +... +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: gui-cord-version + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-gui.cord_version" . | indent 4 }} + diff --git a/helm-charts/xos-gui/templates/gui-deployment.yaml b/helm-charts/xos-gui/templates/gui-deployment.yaml new file mode 100644 index 0000000..d8d8b13 --- /dev/null +++ b/helm-charts/xos-gui/templates/gui-deployment.yaml @@ -0,0 +1,69 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: xos-gui + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +spec: + replicas: 1 + template: + metadata: + labels: + app: xos-gui + spec: + containers: + - name: xos-gui + image: {{ .Values.global.registry }}{{ .Values.images.xos_gui.repository }}:{{ tpl .Values.images.xos_gui.tag . }} + imagePullPolicy: {{ .Values.images.xos_gui.pullPolicy }} + ports: + - containerPort: 4000 + port: 4000 + protocol: TCP + volumeMounts: + - name: style-config + mountPath: /var/www/dist/style.config.js + subPath: style/style.config.js + - name: app-config + mountPath: /var/www/dist/app.config.js + subPath: app/app.config.js + - name: cord-version + mountPath: /var/www/dist/version.json + subPath: version.json + - name: extensions-volume + mountPath: /var/www/dist/extensions + volumes: + - name: style-config + configMap: + name: gui-style-config + items: + - key: config + path: style/style.config.js + - name: app-config + configMap: + name: gui-app-config + items: + - key: config + path: app/app.config.js + - name: cord-version + configMap: + name: gui-cord-version + items: + - key: config + path: version.json + - name: extensions-volume + emptyDir: {} diff --git a/helm-charts/xos-gui/templates/gui-service.yaml b/helm-charts/xos-gui/templates/gui-service.yaml new file mode 100644 index 0000000..2504f58 --- /dev/null +++ b/helm-charts/xos-gui/templates/gui-service.yaml @@ -0,0 +1,30 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "xos-gui" + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +spec: + type: NodePort + ports: + - port: 4000 + targetPort: 4000 + nodePort: {{ .Values.xos_guiNodePort }} + protocol: TCP + selector: + app: "xos-gui" diff --git a/helm-charts/xos-gui/templates/ws-configmap.yaml b/helm-charts/xos-gui/templates/ws-configmap.yaml new file mode 100644 index 0000000..f2caa68 --- /dev/null +++ b/helm-charts/xos-gui/templates/ws-configmap.yaml @@ -0,0 +1,25 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: xos-ws + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +data: + config: | +{{ include "xos-ws.gateway_config" . | indent 4 }} + diff --git a/helm-charts/xos-gui/templates/ws-deployment.yaml b/helm-charts/xos-gui/templates/ws-deployment.yaml new file mode 100644 index 0000000..e10d0f8 --- /dev/null +++ b/helm-charts/xos-gui/templates/ws-deployment.yaml @@ -0,0 +1,48 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: xos-ws + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +spec: + replicas: 1 + template: + metadata: + labels: + app: xos-ws + spec: + containers: + - name: xos-ws + image: {{ .Values.global.registry }}{{ .Values.images.xos_ws.repository }}:{{ tpl .Values.images.xos_ws.tag . }} + imagePullPolicy: {{ .Values.images.xos_ws.pullPolicy }} + command: ["npm", "start", "--", "--config", "gateway-config.yml"] + ports: + - containerPort: 3000 + port: 3000 + protocol: TCP + volumeMounts: + - name: gateway-config + mountPath: /var/www/src/config/gateway-config.yml + subPath: config/gateway-config.yml + volumes: + - name: gateway-config + configMap: + name: xos-ws + items: + - key: config + path: config/gateway-config.yml diff --git a/helm-charts/xos-gui/templates/ws-service.yaml b/helm-charts/xos-gui/templates/ws-service.yaml new file mode 100644 index 0000000..41c1a07 --- /dev/null +++ b/helm-charts/xos-gui/templates/ws-service.yaml @@ -0,0 +1,30 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: "xos-ws" + labels: + {{- include "xos-gui.release_labels" . | indent 4 }} +spec: + type: NodePort + ports: + - port: 3000 + targetPort: 3000 + nodePort: {{ .Values.xos_wsNodePort }} + protocol: TCP + selector: + app: "xos-ws" diff --git a/helm-charts/xos-gui/values.yaml b/helm-charts/xos-gui/values.yaml new file mode 100644 index 0000000..7dbaea4 --- /dev/null +++ b/helm-charts/xos-gui/values.yaml @@ -0,0 +1,39 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +# Docker Images +images: + xos_gui: + repository: 'xosproject/xos-gui' + tag: "{{ .Chart.AppVersion }}" + pullPolicy: 'Always' + + xos_ws: + repository: 'xosproject/xos-rest-gw' + tag: '2.0.2' + pullPolicy: 'Always' + +global: + registry: "" + +# NodePorts +xos_guiNodePort: 30001 +xos_wsNodePort: 30008 + +platformKafka: cord-kafka:9092 + +xos_projectName: "CORD" + +cord_version: 6.1.0 diff --git a/helm-charts/xos-profiles/base-kubernetes/.helmignore b/helm-charts/xos-profiles/base-kubernetes/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-profiles/base-kubernetes/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-profiles/base-kubernetes/Chart.yaml b/helm-charts/xos-profiles/base-kubernetes/Chart.yaml new file mode 100644 index 0000000..c973968 --- /dev/null +++ b/helm-charts/xos-profiles/base-kubernetes/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: base-kubernetes +description: A Helm chart for XOS's "base-kubernetes" profile +icon: https://guide.opencord.org/logos/cord.svg +version: 1.1.0 + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/xos-profiles/base-kubernetes/requirements.yaml b/helm-charts/xos-profiles/base-kubernetes/requirements.yaml new file mode 100644 index 0000000..70d31d9 --- /dev/null +++ b/helm-charts/xos-profiles/base-kubernetes/requirements.yaml @@ -0,0 +1,19 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: kubernetes + version: 1.2.0 + repository: file://../../xos-services/kubernetes diff --git a/helm-charts/xos-profiles/base-kubernetes/templates/_helpers.tpl b/helm-charts/xos-profiles/base-kubernetes/templates/_helpers.tpl new file mode 100644 index 0000000..75cb5bd --- /dev/null +++ b/helm-charts/xos-profiles/base-kubernetes/templates/_helpers.tpl @@ -0,0 +1,52 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "base-kubernetes.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 "base-kubernetes.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "base-kubernetes.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +The R-CORD synchronizer loads R-CORD-specific models into the core +*/}} + diff --git a/helm-charts/xos-profiles/base-kubernetes/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/base-kubernetes/templates/tosca-configmap.yaml new file mode 100644 index 0000000..5da5d15 --- /dev/null +++ b/helm-charts/xos-profiles/base-kubernetes/templates/tosca-configmap.yaml @@ -0,0 +1,27 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: base-kubernetes-tosca +data: + 010-fixtures.yaml: | +{{ toYaml .Values.toscaRecipes.fixtures | indent 4 }} + 040-cord-services.yaml: | +{{ toYaml .Values.toscaRecipes.cordServices | indent 4 }} + 050-service-graph-constraints.yaml: | +{{ toYaml .Values.toscaRecipes.serviceGraphConstraints | indent 4 }} diff --git a/helm-charts/xos-profiles/base-kubernetes/templates/tosca-job.yaml b/helm-charts/xos-profiles/base-kubernetes/templates/tosca-job.yaml new file mode 100644 index 0000000..ec00369 --- /dev/null +++ b/helm-charts/xos-profiles/base-kubernetes/templates/tosca-job.yaml @@ -0,0 +1,55 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "base-kubernetes.fullname" . }}-tosca-loader + labels: + app: {{ template "base-kubernetes.name" . }} + chart: {{ template "base-kubernetes.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + backoffLimit: 12 + template: + metadata: + labels: + app: {{ template "base-kubernetes.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.images.tosca_loader.repository }}:{{ tpl .Values.images.tosca_loader.tag . }} + imagePullPolicy: {{ .Values.images.tosca_loader.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: base-kubernetes-tosca + mountPath: /opt/tosca + volumes: + - name: base-kubernetes-tosca + configMap: + name: base-kubernetes-tosca diff --git a/helm-charts/xos-profiles/base-kubernetes/values.yaml b/helm-charts/xos-profiles/base-kubernetes/values.yaml new file mode 100644 index 0000000..68d2753 --- /dev/null +++ b/helm-charts/xos-profiles/base-kubernetes/values.yaml @@ -0,0 +1,131 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the base-kubernetes profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +# tosca loader container +images: + tosca_loader: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +# TOSCA recipes for the tosca-loader +toscaRecipes: + fixtures: + tosca_definitions_version: tosca_simple_yaml_1_0 + description: Some basic fixtures + imports: + - custom_types/networkparametertype.yaml + - custom_types/networktemplate.yaml + topology_template: + node_templates: + # ----------------------------------------------------------------------------- + # Network Parameter Types + # ----------------------------------------------------------------------------- + s_tag: + type: tosca.nodes.NetworkParameterType + properties: + name: s_tag + c_tag: + type: tosca.nodes.NetworkParameterType + properties: + name: c_tag + next_hop: + type: tosca.nodes.NetworkParameterType + properties: + name: next_hop + device: + type: tosca.nodes.NetworkParameterType + properties: + name: device + bridge: + type: tosca.nodes.NetworkParameterType + properties: + name: bridge + neutron_port_name: + type: tosca.nodes.NetworkParameterType + properties: + name: neutron_port_name + + # ----------------------------------------------------------------------------- + # Network Templates + # ----------------------------------------------------------------------------- + Private: + type: tosca.nodes.NetworkTemplate + properties: + name: Private + visibility: private + translation: none + Public shared IPv4: + type: tosca.nodes.NetworkTemplate + properties: + name: Public shared IPv4 + visibility: private + translation: NAT + shared_network_name: nat-net + Public dedicated IPv4: + type: tosca.nodes.NetworkTemplate + properties: + name: Public dedicated IPv4 + visibility: public + translation: none + shared_network_name: ext-net + + cordServices: + tosca_definitions_version: tosca_simple_yaml_1_0 + description: Set up Kubernetes Service + imports: + - custom_types/kubernetesservice.yaml + - custom_types/trustdomain.yaml + topology_template: + node_templates: + default_trustdomain: + type: tosca.nodes.TrustDomain + properties: + name: "default" + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + service#kubernetes: + type: tosca.nodes.KubernetesService + properties: + name: kubernetes + + serviceGraphConstraints: + tosca_definitions_version: tosca_simple_yaml_1_0 + imports: + - custom_types/servicegraphconstraint.yaml + description: Constraints on the Services position in the graph + topology_template: + node_templates: + constraints: + type: tosca.nodes.ServiceGraphConstraint + properties: + constraints: '[]' diff --git a/helm-charts/xos-profiles/base-openstack/.helmignore b/helm-charts/xos-profiles/base-openstack/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-profiles/base-openstack/Chart.yaml b/helm-charts/xos-profiles/base-openstack/Chart.yaml new file mode 100644 index 0000000..75a5e51 --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: base-openstack +description: A Helm chart for the "base-openstack" profile +icon: https://guide.opencord.org/logos/cord.svg +version: 0.2.0 + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/xos-profiles/base-openstack/files/node_key b/helm-charts/xos-profiles/base-openstack/files/node_key new file mode 100644 index 0000000..de2efc7 --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/files/node_key @@ -0,0 +1,18 @@ +# Copyright 2018-present Open Networking Foundation +# +# 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. + +########################################################## +# Overwrite this file with a private SSH key for logging # +# into the OpenStack compute nodes # +########################################################## diff --git a/helm-charts/xos-profiles/base-openstack/requirements.yaml b/helm-charts/xos-profiles/base-openstack/requirements.yaml new file mode 100644 index 0000000..af5211f --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/requirements.yaml @@ -0,0 +1,25 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: onos-service + version: 2.1.0 + repository: file://../../xos-services/onos-service +- name: openstack + version: 1.1.6 + repository: file://../../xos-services/openstack +- name: vtn-service + version: 1.0.4 + repository: file://../../xos-services/vtn-service diff --git a/helm-charts/xos-profiles/base-openstack/templates/_helpers.tpl b/helm-charts/xos-profiles/base-openstack/templates/_helpers.tpl new file mode 100644 index 0000000..bd4fcce --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "base-openstack.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 "base-openstack.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "base-openstack.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/xos-profiles/base-openstack/templates/_tosca.tpl b/helm-charts/xos-profiles/base-openstack/templates/_tosca.tpl new file mode 100644 index 0000000..e39f9a4 --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/templates/_tosca.tpl @@ -0,0 +1,229 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "base-openstack.fixtureTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/deployment.yaml + - custom_types/site.yaml + - custom_types/networktemplate.yaml + - custom_types/network.yaml + - custom_types/networkslice.yaml + - custom_types/sitedeployment.yaml + +description: set up site and deployment and link them + +topology_template: + node_templates: + + {{ .Values.cordSiteName }}: + type: tosca.nodes.Site + properties: + name: {{ .Values.cordSiteName }} + site_url: http://mysite.opencord.us/ + hosts_nodes: true + +{{- end -}} + +{{- define "base-openstack.serviceGraphTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/onosapp.yaml + - custom_types/onosservice.yaml + - custom_types/servicedependency.yaml + - custom_types/servicegraphconstraint.yaml + - custom_types/servicedependency.yaml + - custom_types/serviceinstance.yaml + - custom_types/serviceinstancelink.yaml + - custom_types/vtnservice.yaml + +description: Configures the base-openstack service graph + +topology_template: + node_templates: + + service#vtn: + type: tosca.nodes.VTNService + properties: + name: vtn + must-exist: true + resync: false + + service#ONOS_CORD: + type: tosca.nodes.ONOSService + properties: + name: ONOS_CORD + must-exist: true + + # NOTE this is defined in the onos-service TOSCA + onos_app#vtn: + type: tosca.nodes.ONOSApp + properties: + name: vtn + must-exist: true + + # NOTE this is defined in the vtn-service TOSCA + vtn_service_instance: + type: tosca.nodes.ServiceInstance + properties: + name: VTN config + must-exist: true + + onos_app#vtn_VTN_Service: + type: tosca.nodes.ServiceInstanceLink + requirements: + - provider_service_instance: + node: onos_app#vtn + relationship: tosca.relationships.BelongsToOne + - subscriber_service: + node: service#vtn + relationship: tosca.relationships.BelongsToOne + + link#vtn_to_vtn-config: + type: tosca.nodes.ServiceInstanceLink + requirements: + - subscriber_service_instance: + node: vtn_service_instance + relationship: tosca.relationships.BelongsToOne + - provider_service_instance: + node: onos_app#vtn + relationship: tosca.relationships.BelongsToOne + + service_dependency#onos-cord_vtn: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#ONOS_CORD + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#vtn + relationship: tosca.relationships.BelongsToOne +{{- end -}} + +{{- define "base-openstack.testTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/flavor.yaml + - custom_types/image.yaml + - custom_types/site.yaml + - custom_types/network.yaml + - custom_types/networkslice.yaml + - custom_types/slice.yaml + +description: for testing basic openstack functionality + +topology_template: + node_templates: + + Ubuntu-14.04: + type: tosca.nodes.Image + properties: + name: "Ubuntu 14.04 64-bit" + disk_format: QCOW2 + container_format: BARE + path: https://github.com/opencord/platform-install/releases/download/vms/trusty-server-cloudimg-amd64-disk1.img.20170201 + + {{ .Values.cordSiteName }}: + type: tosca.nodes.Site + properties: + name: {{ .Values.cordSiteName }} + must-exist: true + +# Define a test slice + {{ .Values.cordSiteName }}_test: + description: Test Slice + type: tosca.nodes.Slice + properties: + # network: noauto + name: {{ .Values.cordSiteName }}_test + requirements: + - site: + node: {{ .Values.cordSiteName }} + relationship: tosca.relationships.BelongsToOne + - default_image: + node: Ubuntu-14.04 + relationship: tosca.relationships.BelongsToOne + + management: + type: tosca.nodes.Network + properties: + name: management + must-exist: true + +# Connect test slice to management net + networkslice#management_to_{{ .Values.cordSiteName }}_test: + type: tosca.nodes.NetworkSlice + requirements: + - network: + node: management + relationship: tosca.relationships.BelongsToOne + - slice: + node: {{ .Values.cordSiteName }}_test + relationship: tosca.relationships.BelongsToOne +{{- end -}} + +{{- define "base-openstack.computeNodeTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/deployment.yaml + - custom_types/node.yaml + - custom_types/site.yaml + - custom_types/sitedeployment.yaml + +description: Adds OpenStack compute nodes + +topology_template: + node_templates: + +# Site/Deployment, fully defined in deployment.yaml + site: + type: tosca.nodes.Site + properties: + name: {{ .Values.cordSiteName }} + must-exist: true + + site_deployment: + type: tosca.nodes.SiteDeployment + requirements: + - site: + node: site + relationship: tosca.relationships.BelongsToOne + - deployment: + node: deployment + relationship: tosca.relationships.BelongsToOne + +# OpenStack compute nodes + + {{- range .Values.computeNodes }} + {{ .name }}: + type: tosca.nodes.Node + properties: + name: {{ .name }} + bridgeId: {{ .bridgeId }} + dataPlaneIntf: {{ .dataPlaneIntf }} + dataPlaneIp: {{ .dataPlaneIp }} + requirements: + - site_deployment: + node: site_deployment + relationship: tosca.relationships.BelongsToOne + {{- end }} +{{- end -}} diff --git a/helm-charts/xos-profiles/base-openstack/templates/secret.yaml b/helm-charts/xos-profiles/base-openstack/templates/secret.yaml new file mode 100644 index 0000000..01cf74b --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: node-key + namespace: default +type: Opaque +data: + node_key: {{ .Files.Get .Values.nodeKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-profiles/base-openstack/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/base-openstack/templates/tosca-configmap.yaml new file mode 100644 index 0000000..308fc83 --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/templates/tosca-configmap.yaml @@ -0,0 +1,38 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: base-openstack-tosca +data: + 010-fixtures.yaml: | +{{ include "base-openstack.fixtureTosca" . | indent 4 }} + 020-openstack-controller.yaml: | +{{ include "openstack.controllerTosca" .Values | indent 4 }} + 030-openstack-flavors.yaml: | +{{ include "openstack.flavorTosca" .Values.openstack | indent 4 }} + 040-onos-service-vtn-app.yaml: | +{{ include "onos-service.vtnAppTosca" (index .Values "onos-service") | indent 4 }} + 041-vtn-service.yaml: | +{{ include "vtn-service.serviceTosca" (index .Values "vtn-service") | indent 4 }} + 050-openstack-compute.yaml: | +{{ include "base-openstack.computeNodeTosca" . | indent 4 }} + 060-openstack-networks.yaml: | +{{ include "openstack.networkTosca" .Values | indent 4 }} + 300-service-graph.yaml: | +{{ include "base-openstack.serviceGraphTosca" . | indent 4 }} + diff --git a/helm-charts/xos-profiles/base-openstack/templates/tosca-job.yaml b/helm-charts/xos-profiles/base-openstack/templates/tosca-job.yaml new file mode 100644 index 0000000..48d0b9e --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/templates/tosca-job.yaml @@ -0,0 +1,54 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "base-openstack.fullname" . }}-tosca-loader + labels: + app: {{ template "base-openstack.name" . }} + chart: {{ template "base-openstack.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + template: + metadata: + labels: + app: {{ template "base-openstack.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: base-openstack-tosca + mountPath: /opt/tosca + volumes: + - name: base-openstack-tosca + configMap: + name: base-openstack-tosca diff --git a/helm-charts/xos-profiles/base-openstack/values.yaml b/helm-charts/xos-profiles/base-openstack/values.yaml new file mode 100644 index 0000000..1dbda7e --- /dev/null +++ b/helm-charts/xos-profiles/base-openstack/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the base-openstack profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +# tosca loader container +image: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +cordSiteName: &site "mysite" + +keystoneAdminUser: "admin" +keystoneAdminPassword: "password" +keystoneAdminTenant: "admin" +keystoneDomain: "Default" + +nodeKeyFile: "files/node_key" + +# List of compute nodes to add to XOS +computeNodes: + master: + name: node0.opencord.org + bridgeId: of:00000000abcdef01 + dataPlaneIntf: fabric + dataPlaneIp: 10.6.1.1/24 diff --git a/helm-charts/xos-profiles/demo-exampleservice/Chart.yaml b/helm-charts/xos-profiles/demo-exampleservice/Chart.yaml new file mode 100644 index 0000000..c5c2d6f --- /dev/null +++ b/helm-charts/xos-profiles/demo-exampleservice/Chart.yaml @@ -0,0 +1,24 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: demo-exampleservice +description: A Helm chart that launches and configures ExampleService. It's assumed that base-kubernetes profile is installed. +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.0 + +# xosproject/tosca-loader version +appVersion: 1.3.0 + diff --git a/helm-charts/xos-profiles/demo-exampleservice/requirements.yaml b/helm-charts/xos-profiles/demo-exampleservice/requirements.yaml new file mode 100644 index 0000000..2d21f8c --- /dev/null +++ b/helm-charts/xos-profiles/demo-exampleservice/requirements.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: exampleservice + version: 2.2.4 + repository: file://../../xos-services/exampleservice +- name: addressmanager + version: 2.0.4 + repository: file://../../xos-services/addressmanager diff --git a/helm-charts/xos-profiles/demo-exampleservice/templates/_helpers.tpl b/helm-charts/xos-profiles/demo-exampleservice/templates/_helpers.tpl new file mode 100644 index 0000000..abeb4d4 --- /dev/null +++ b/helm-charts/xos-profiles/demo-exampleservice/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "demo-exampleservice.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 "demo-exampleservice.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "demo-exampleservice.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/xos-profiles/demo-exampleservice/templates/_tosca.tpl b/helm-charts/xos-profiles/demo-exampleservice/templates/_tosca.tpl new file mode 100644 index 0000000..66c3279 --- /dev/null +++ b/helm-charts/xos-profiles/demo-exampleservice/templates/_tosca.tpl @@ -0,0 +1,111 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "demo-exampleservice.publicNetworkTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Setup public network +imports: + - custom_types/addressmanagerservice.yaml + - custom_types/addressmanagerserviceinstance.yaml + - custom_types/addresspool.yaml + - custom_types/networktemplate.yaml + - custom_types/network.yaml + - custom_types/serviceinstancelink.yaml + - custom_types/site.yaml + - custom_types/slice.yaml +topology_template: + node_templates: + mysite: + type: tosca.nodes.Site + properties: + name: {{ .Values.cordSiteName }} + must-exist: true + + public_networking_slice: + description: This slice exists solely to own the public network + type: tosca.nodes.Slice + properties: + network: noauto + name: public_networking + requirements: + - site: + node: mysite + relationship: tosca.relationships.BelongsToOne + + # public network + public_template: + type: tosca.nodes.NetworkTemplate + properties: + name: public_template + visibility: public + translation: none + vtn_kind: PUBLIC + + public: + type: tosca.nodes.Network + properties: + name: public + permit_all_slices: true + subnet: {{ .Values.addresspool_public_cidr }} + # ip_version: 4 + requirements: + - template: + node: public_template + relationship: tosca.relationships.BelongsToOne + - owner: + node: public_networking_slice + relationship: tosca.relationships.BelongsToOne + + service#addressmanager: + type: tosca.nodes.AddressManagerService + properties: + name: addressmanager + + addresses_public: + type: tosca.nodes.AddressPool + properties: + name: addresses_public + addresses: {{ .Values.addresspool_public_cidr }} + gateway_ip: {{ .Values.addresspool_public_gateway_ip }} + gateway_mac: {{ .Values.addresspool_public_gateway_mac }} + requirements: + - service: + node: service#addressmanager + relationship: tosca.relationships.BelongsToOne + + AddressManagerServiceInstancePublicNetwork: + type: tosca.nodes.AddressManagerServiceInstance + requirements: + - owner: + node: service#addressmanager + relationship: tosca.relationships.BelongsToOne + - address_pool: + node: addresses_public + relationship: tosca.relationships.BelongsToOne + properties: + name: AM_public_net + + public_to_address_manager: + type: tosca.nodes.ServiceInstanceLink + requirements: + - provider_service_instance: + node: AddressManagerServiceInstancePublicNetwork + relationship: tosca.relationships.BelongsToOne + - subscriber_network: + node: public + relationship: tosca.relationships.BelongsToOne + +{{- end -}} diff --git a/helm-charts/xos-profiles/demo-exampleservice/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/demo-exampleservice/templates/tosca-configmap.yaml new file mode 100644 index 0000000..1c7f0a7 --- /dev/null +++ b/helm-charts/xos-profiles/demo-exampleservice/templates/tosca-configmap.yaml @@ -0,0 +1,25 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: demo-exampleservice-tosca +data: + 010-publicnet.yaml: | +{{ include "demo-exampleservice.publicNetworkTosca" . | indent 4 }} + 050-exampleservice-service.yaml: | +{{ include "exampleservice.serviceTosca" .Values.exampleservice | indent 4 }} diff --git a/helm-charts/xos-profiles/demo-exampleservice/templates/tosca-job.yaml b/helm-charts/xos-profiles/demo-exampleservice/templates/tosca-job.yaml new file mode 100644 index 0000000..53cce60 --- /dev/null +++ b/helm-charts/xos-profiles/demo-exampleservice/templates/tosca-job.yaml @@ -0,0 +1,54 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "demo-exampleservice.fullname" . }}-tosca-loader + labels: + app: {{ template "demo-exampleservice.name" . }} + chart: {{ template "demo-exampleservice.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + template: + metadata: + labels: + app: {{ template "demo-exampleservice.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: demo-exampleservice-tosca + mountPath: /opt/tosca + volumes: + - name: demo-exampleservice-tosca + configMap: + name: demo-exampleservice-tosca diff --git a/helm-charts/xos-profiles/demo-exampleservice/values.yaml b/helm-charts/xos-profiles/demo-exampleservice/values.yaml new file mode 100644 index 0000000..c2f3a78 --- /dev/null +++ b/helm-charts/xos-profiles/demo-exampleservice/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the demo-exampleservice profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +cordSiteName: "mysite" + +addresspool_public_cidr: "10.8.1.0/24" +addresspool_public_gateway_ip: "10.8.1.1" +addresspool_public_gateway_mac: "a4:23:05:06:01:01" + +global: + proxySshEnabled: true + proxySshUser: root + registry: '' diff --git a/helm-charts/xos-profiles/demo-simpleexampleservice/Chart.yaml b/helm-charts/xos-profiles/demo-simpleexampleservice/Chart.yaml new file mode 100644 index 0000000..25c0ba0 --- /dev/null +++ b/helm-charts/xos-profiles/demo-simpleexampleservice/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: demo-simpleexampleservice +description: A Helm chart that launches and configures SimpleExampleService. It's assumed that base-kubernetes profile is installed. +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.0 + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/xos-profiles/demo-simpleexampleservice/requirements.yaml b/helm-charts/xos-profiles/demo-simpleexampleservice/requirements.yaml new file mode 100644 index 0000000..b9cf45e --- /dev/null +++ b/helm-charts/xos-profiles/demo-simpleexampleservice/requirements.yaml @@ -0,0 +1,19 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: simpleexampleservice + version: 1.2.0 + repository: file://../../xos-services/simpleexampleservice diff --git a/helm-charts/xos-profiles/demo-simpleexampleservice/templates/_helpers.tpl b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/_helpers.tpl new file mode 100644 index 0000000..99ca409 --- /dev/null +++ b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "demo-simpleexampleservice.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 "demo-simpleexampleservice.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "demo-simpleexampleservice.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tests/test-demo-simpleexampleservice.yaml b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tests/test-demo-simpleexampleservice.yaml new file mode 100644 index 0000000..bfdcfb3 --- /dev/null +++ b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tests/test-demo-simpleexampleservice.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: "{{ .Release.Name }}-api-test" + annotations: + "helm.sh/hook": test-success +spec: + restartPolicy: Never + containers: + - name: {{ .Release.Name }}-api-test + image: {{ .Values.global.registry }}{{ .Values.images.xos_api_tester.repository }}:{{ tpl .Values.images.xos_api_tester.tag . }} + imagePullPolicy: {{ .Values.images.xos_api_tester.pullPolicy }} + volumeMounts: + - name: log-volume + mountPath: /src/cord-api/Tests/Log/ + env: + - name: SERVER_IP + value: 'xos-chameleon' + - name: SERVER_PORT + value: '9101' + - name: XOS_USER + value: {{ .Values.xosAdminUser | quote }} + - name: XOS_PASSWD + value: {{ .Values.xosAdminPassword | quote}} + command: ["pybot", "-L", "TRACE", "-d", "Log", "-T", "DemoSimpleExampleService.robot"] + volumes: + - name: log-volume + hostPath: + path: /tmp/helm_test_demo-simpleexampleservice_logs_{{ dateInZone "20060102T030405.00Z" (now) "UTC" }} + type: DirectoryOrCreate diff --git a/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tosca-configmap.yaml new file mode 100644 index 0000000..9ed3020 --- /dev/null +++ b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tosca-configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: demo-simpleexampleservice-tosca +data: + 010-simpleexampleservice-service.yaml: | +{{ include "simpleexampleservice.serviceTosca" .Values.simpleexampleservice | indent 4 }} diff --git a/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tosca-job.yaml b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tosca-job.yaml new file mode 100644 index 0000000..210e44f --- /dev/null +++ b/helm-charts/xos-profiles/demo-simpleexampleservice/templates/tosca-job.yaml @@ -0,0 +1,54 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "demo-simpleexampleservice.fullname" . }}-tosca-loader + labels: + app: {{ template "demo-simpleexampleservice.name" . }} + chart: {{ template "demo-simpleexampleservice.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + template: + metadata: + labels: + app: {{ template "demo-simpleexampleservice.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.images.tosca_loader.repository }}:{{ tpl .Values.images.tosca_loader.tag . }} + imagePullPolicy: {{ .Values.images.tosca_loader.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: demo-simpleexampleservice-tosca + mountPath: /opt/tosca + volumes: + - name: demo-simpleexampleservice-tosca + configMap: + name: demo-simpleexampleservice-tosca diff --git a/helm-charts/xos-profiles/demo-simpleexampleservice/values.yaml b/helm-charts/xos-profiles/demo-simpleexampleservice/values.yaml new file mode 100644 index 0000000..1373cf5 --- /dev/null +++ b/helm-charts/xos-profiles/demo-simpleexampleservice/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the demo-simpleexampleservice profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +images: + tosca_loader: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + xos_api_tester: + repository: 'xosproject/xos-api-tester' + tag: 'master' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +cordSiteName: "mysite" diff --git a/helm-charts/xos-profiles/mcord/.helmignore b/helm-charts/xos-profiles/mcord/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-profiles/mcord/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-profiles/mcord/Chart.yaml b/helm-charts/xos-profiles/mcord/Chart.yaml new file mode 100644 index 0000000..7aee752 --- /dev/null +++ b/helm-charts/xos-profiles/mcord/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: mcord +description: A Helm chart for the "mcord" profile +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.0 + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/xos-profiles/mcord/requirements.yaml b/helm-charts/xos-profiles/mcord/requirements.yaml new file mode 100644 index 0000000..04dc926 --- /dev/null +++ b/helm-charts/xos-profiles/mcord/requirements.yaml @@ -0,0 +1,33 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: onos-service + version: 2.1.0 + repository: file://../../xos-services/onos-service + condition: onos-service.enabled +- name: fabric + version: 2.2.0 + repository: file://../../xos-services/fabric + condition: fabric.enabled +- name: mcord-subscriber + version: 2.0.5 + repository: file://../../xos-services/mcord-subscriber +- name: progran + version: 2.0.7 + repository: file://../../xos-services/progran +- name: vrouter + version: 2.1.0 + repository: file://../../xos-services/vrouter diff --git a/helm-charts/xos-profiles/mcord/templates/_helpers.tpl b/helm-charts/xos-profiles/mcord/templates/_helpers.tpl new file mode 100644 index 0000000..0bd8908 --- /dev/null +++ b/helm-charts/xos-profiles/mcord/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "mcord.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 "mcord.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mcord.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/xos-profiles/mcord/templates/_tosca.tpl b/helm-charts/xos-profiles/mcord/templates/_tosca.tpl new file mode 100644 index 0000000..175f406 --- /dev/null +++ b/helm-charts/xos-profiles/mcord/templates/_tosca.tpl @@ -0,0 +1,250 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "mcord.fixtureTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/deployment.yaml + - custom_types/site.yaml + +description: set up site and deployment and link them + +topology_template: + node_templates: + + {{ .Values.cordSiteName }}: + type: tosca.nodes.Site + properties: + name: {{ .Values.cordSiteName }} + site_url: http://mysite.opencord.us/ + hosts_nodes: true + +{{- end -}} + +{{- define "mcord.onosTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/onosapp.yaml + - custom_types/onosservice.yaml + - custom_types/serviceinstanceattribute.yaml + +description: Configures the VOLTHA ONOS service + +topology_template: + node_templates: + + service#onos: + type: tosca.nodes.ONOSService + properties: + name: onos + kind: data + rest_hostname: {{ .onosRestService | quote }} + rest_port: 8181 + + onos_app#segmentrouting: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.segmentrouting + app_id: org.onosproject.segmentrouting + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#netcfghostprovider: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.netcfghostprovider + app_id: org.onosproject.netcfghostprovider + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#openflow: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.openflow + app_id: org.onosproject.openflow + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne +{{- end -}} + +{{- define "mcord.serviceGraphTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/fabricservice.yaml + - custom_types/mcordsubscriberservice.yaml + - custom_types/onosservice.yaml + - custom_types/progranservice.yaml + - custom_types/vrouterservice.yaml + - custom_types/servicegraphconstraint.yaml + - custom_types/servicedependency.yaml + - custom_types/service.yaml + +description: Configures the M-CORD service graph + +topology_template: + node_templates: + + service#progran: + type: tosca.nodes.ProgranService + properties: + name: progran + must-exist: true + + service#vrouter: + type: tosca.nodes.VRouterService + properties: + name: vrouter + must-exist: true + + service#mcord: + type: tosca.nodes.MCordSubscriberService + properties: + name: mcord + must-exist: true + + service#onos: + type: tosca.nodes.ONOSService + properties: + name: onos + must-exist: true + + service#fabric: + type: tosca.nodes.FabricService + properties: + name: fabric + must-exist: true + + service#epc-local: + type: tosca.nodes.Service + properties: + name: epc-local + + service#epc-remote: + type: tosca.nodes.Service + properties: + name: epc-remote + + service#cdn-local: + type: tosca.nodes.Service + properties: + name: cdn-local + + service#cdn-remote: + type: tosca.nodes.Service + properties: + name: cdn-remote + + service_dependency#epc_local_cdn_local: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#epc-local + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#cdn-local + relationship: tosca.relationships.BelongsToOne + + service_dependency#cdn_local_cdn_remote: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#cdn-local + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#cdn-remote + relationship: tosca.relationships.BelongsToOne + + service_dependency#mcord_progran: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#progran + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#mcord + relationship: tosca.relationships.BelongsToOne + + service_dependency#progran_epc_local: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#epc-local + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#progran + relationship: tosca.relationships.BelongsToOne + + service_dependency#epc_local_epc_remote: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#epc-remote + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#epc-local + relationship: tosca.relationships.BelongsToOne + + service_dependency#onos-fabric_fabric: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#fabric + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + service_dependency#vrouter_fabric: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#vrouter + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#fabric + relationship: tosca.relationships.BelongsToOne + + constraints: + type: tosca.nodes.ServiceGraphConstraint + properties: +{{- if .Values.seba.enabled }} + constraints: '[ ["mcord", null, "onos"], ["progran", null, "fabric"], ["epc-local", null, null] ["epc-remote", null, null] ]' +{{ else }} + constraints: '[ ["mcord", null, "rcord", null], ["progran", null, "volt", "att-workflow-driver"], ["epc-local", "cdn-local", "fabric-crossconnect", "onos"], ["epc-remote", "cdn-remote", "vrouter", "fabric"] ]' +{{- end -}} +{{- end -}} diff --git a/helm-charts/xos-profiles/mcord/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/mcord/templates/tosca-configmap.yaml new file mode 100644 index 0000000..253d045 --- /dev/null +++ b/helm-charts/xos-profiles/mcord/templates/tosca-configmap.yaml @@ -0,0 +1,37 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: mcord-tosca +data: + 010-onos-service.yaml: | +{{ include "mcord.onosTosca" .Values | indent 4 }} +{{- if .Values.fabric.enabled }} + 020-fabric-service.yaml: | +{{ include "fabric.serviceTosca" .Values.fabric | indent 4 }} +{{- end }} + 030-fixtures.yaml: | +{{ include "mcord.fixtureTosca" . | indent 4 }} + 040-progran-service.yaml: | +{{ include "progran.serviceTosca" .Values.progran | indent 4 }} + 050-vrouter-service.yaml: | +{{ include "vrouter.serviceTosca" .Values.vrouter | indent 4 }} + 100-mcord-subscriber-service.yaml: | +{{ include "mcord-subscriber.serviceTosca" (index .Values "mcord-subscriber") | indent 4 }} + 300-service-graph.yaml: | +{{ include "mcord.serviceGraphTosca" . | indent 4 }} diff --git a/helm-charts/xos-profiles/mcord/templates/tosca-job.yaml b/helm-charts/xos-profiles/mcord/templates/tosca-job.yaml new file mode 100644 index 0000000..5f72ce2 --- /dev/null +++ b/helm-charts/xos-profiles/mcord/templates/tosca-job.yaml @@ -0,0 +1,54 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "mcord.fullname" . }}-tosca-loader + labels: + app: {{ template "mcord.name" . }} + chart: {{ template "mcord.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + template: + metadata: + labels: + app: {{ template "mcord.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.images.tosca_loader.repository }}:{{ tpl .Values.images.tosca_loader.tag . }} + imagePullPolicy: {{ .Values.images.tosca_loader.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: mcord-tosca + mountPath: /opt/tosca + volumes: + - name: mcord-tosca + configMap: + name: mcord-tosca diff --git a/helm-charts/xos-profiles/mcord/values.yaml b/helm-charts/xos-profiles/mcord/values.yaml new file mode 100644 index 0000000..15f110d --- /dev/null +++ b/helm-charts/xos-profiles/mcord/values.yaml @@ -0,0 +1,50 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the base-openstack profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +images: + tosca_loader: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +cordSiteName: "mysite" + +onosRestService: "onos-ui.default.svc.cluster.local" +kafkaService: "cord-kafka.default.svc.cluster.local:9092" + +# whether to install or not this shared services +fabric: + enabled: true +onos-service: + enabled: true + +# wheter SEBA will be installed on the side or not +seba: + enabled: false \ No newline at end of file diff --git a/helm-charts/xos-profiles/ponsim-pod/Chart.yaml b/helm-charts/xos-profiles/ponsim-pod/Chart.yaml new file mode 100644 index 0000000..23c06b5 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: ponsim-pod +description: A Helm chart for loading the Ponsim pod's TOSCA files into XOS +icon: https://guide.opencord.org/logos/xos.svg + +version: 1.2.0 + +# xosproject/tosca-loader version +appVersion: 1.1.5 diff --git a/helm-charts/xos-profiles/ponsim-pod/templates/_helpers.tpl b/helm-charts/xos-profiles/ponsim-pod/templates/_helpers.tpl new file mode 100644 index 0000000..64b51f5 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/templates/_helpers.tpl @@ -0,0 +1,48 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "ponsim-pod.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 "ponsim-pod.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "ponsim-pod.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + diff --git a/helm-charts/xos-profiles/ponsim-pod/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/ponsim-pod/templates/tosca-configmap.yaml new file mode 100644 index 0000000..9829f03 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/templates/tosca-configmap.yaml @@ -0,0 +1,24 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: ponsim-pod-tosca +data: +{{- $workflowpath := printf "tosca/%s/*" .Values.workflow }} +{{ tpl (.Files.Glob $workflowpath).AsConfig . | indent 2 }} +{{ tpl (.Files.Glob "tosca/*").AsConfig . | indent 2 }} diff --git a/helm-charts/xos-profiles/ponsim-pod/templates/tosca-job.yaml b/helm-charts/xos-profiles/ponsim-pod/templates/tosca-job.yaml new file mode 100644 index 0000000..92d4cd1 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/templates/tosca-job.yaml @@ -0,0 +1,56 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "ponsim-pod.fullname" . }}-ponsim-pod + labels: + app: {{ template "ponsim-pod.name" . }} + chart: {{ template "ponsim-pod.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + backoffLimit: 12 + template: + metadata: + labels: + app: {{ template "ponsim-pod.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-ponsim-pod + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: ponsim-pod-tosca + mountPath: /opt/tosca + volumes: + - name: ponsim-pod-tosca + configMap: + name: ponsim-pod-tosca diff --git a/helm-charts/xos-profiles/ponsim-pod/tosca/020-pod-olt.yaml b/helm-charts/xos-profiles/ponsim-pod/tosca/020-pod-olt.yaml new file mode 100644 index 0000000..724d56c --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/tosca/020-pod-olt.yaml @@ -0,0 +1,57 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/oltdevice.yaml + - custom_types/onudevice.yaml + - custom_types/ponport.yaml + - custom_types/voltservice.yaml +description: Create a simulated OLT Device in VOLTHA +topology_template: + node_templates: + + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + must-exist: true + + olt_device: + type: tosca.nodes.OLTDevice + properties: + name: PONSIM OLT + device_type: ponsim_olt + host: olt.voltha.svc + port: 50060 + switch_datapath_id: of:0000000000000001 + switch_port: "2" + outer_tpid: "0x8100" + dp_id: of:0000aabbccddeeff + uplink: "2" + requirements: + - volt_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + pon_port: + type: tosca.nodes.PONPort + properties: + name: pon0 + port_no: 1 + requirements: + - olt_device: + node: olt_device + relationship: tosca.relationships.BelongsToOne diff --git a/helm-charts/xos-profiles/ponsim-pod/tosca/030-fabric.yaml b/helm-charts/xos-profiles/ponsim-pod/tosca/030-fabric.yaml new file mode 100644 index 0000000..ce3dda8 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/tosca/030-fabric.yaml @@ -0,0 +1,91 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/switch.yaml + - custom_types/onosapp.yaml + - custom_types/switchport.yaml + - custom_types/portinterface.yaml + - custom_types/bngportmapping.yaml + - custom_types/serviceinstanceattribute.yaml + +description: Configures the Ponsim SEBA POD fabric + +topology_template: + node_templates: + # Fabric configuration + switch#leaf_1: + type: tosca.nodes.Switch + properties: + driver: ofdpa-ovs + ipv4Loopback: 192.168.0.201 + ipv4NodeSid: 17 + isEdgeRouter: True + name: leaf_1 + ofId: of:0000000000000001 + routerMac: 00:00:02:01:06:01 + + # Setup the OLT switch port + port#olt_port: + type: tosca.nodes.SwitchPort + properties: + portId: 2 + host_learning: false + requirements: + - switch: + node: switch#leaf_1 + relationship: tosca.relationships.BelongsToOne + + # Port connected to the BNG + port#bng_port: + type: tosca.nodes.SwitchPort + properties: + portId: 1 + requirements: + - switch: + node: switch#leaf_1 + relationship: tosca.relationships.BelongsToOne + + # Setup the fabric switch port where the external + # router is connected to + bngmapping: + type: tosca.nodes.BNGPortMapping + properties: + s_tag: "any" + switch_port: 1 + + onos_app#dhcpl2relay: + type: tosca.nodes.ONOSApp + properties: + name: dhcpl2relay + must-exist: true + + # DHCP L2 Relay config + dhcpl2relay-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.dhcpl2relay + value: > + { + "dhcpl2relay" : { + "useOltUplinkForServerPktInOut" : false, + "dhcpServerConnectPoints" : [ "of:0000000000000001/1" ] + } + } + requirements: + - service_instance: + node: onos_app#dhcpl2relay + relationship: tosca.relationships.BelongsToOne diff --git a/helm-charts/xos-profiles/ponsim-pod/tosca/040-subscriber.yaml b/helm-charts/xos-profiles/ponsim-pod/tosca/040-subscriber.yaml new file mode 100644 index 0000000..c806d2c --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/tosca/040-subscriber.yaml @@ -0,0 +1,58 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/rcordsubscriber.yaml +{{- if .Values.bandwidthProfiles }} + - custom_types/bandwidthprofile.yaml +{{- end }} + +description: Pre-provsion a subscriber + +topology_template: + node_templates: + +{{- if .Values.bandwidthProfiles }} + # Bronze bandwidthprofile for subscriber + bronze_bp: + type: tosca.nodes.BandwidthProfile + properties: + air: 99999 + cbs: 99999 + cir: 99999 + ebs: 99999 + eir: 99999 + name: Bronze +{{- end }} + + # Pre-provision the subscriber the subscriber + my_house: + type: tosca.nodes.RCORDSubscriber + properties: + name: QQClient + status: pre-provisioned + c_tag: 111 + s_tag: 222 + onu_device: PSMO12345678 +{{- if .Values.bandwidthProfiles }} + requirements: + - upstream_bps: + node: bronze_bp + relationship: tosca.relationships.BelongsToOne + - downstream_bps: + node: bronze_bp + relationship: tosca.relationships.BelongsToOne +{{- end }} \ No newline at end of file diff --git a/helm-charts/xos-profiles/ponsim-pod/tosca/att-workflow/010-att-workflow.yaml b/helm-charts/xos-profiles/ponsim-pod/tosca/att-workflow/010-att-workflow.yaml new file mode 100644 index 0000000..1af0eb2 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/tosca/att-workflow/010-att-workflow.yaml @@ -0,0 +1,43 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary @oss-service.yaml http://10.90.0.101:30007/run + +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/servicedependency.yaml + - custom_types/voltservice.yaml + - custom_types/attworkflowdriverwhitelistentry.yaml + - custom_types/attworkflowdriverservice.yaml +description: Create an instance of the OSS Service and connect it to the vOLT Service +topology_template: + node_templates: + + service#att: + type: tosca.nodes.AttWorkflowDriverService + properties: + name: att-workflow-driver + must-exist: true + + whitelist: + type: tosca.nodes.AttWorkflowDriverWhiteListEntry + properties: + serial_number: PSMO12345678 + device_id: of:0000aabbccddeeff + pon_port_id: 1 + requirements: + - owner: + node: service#att + relationship: tosca.relationships.BelongsToOne diff --git a/helm-charts/xos-profiles/ponsim-pod/tosca/tt-workflow/010-tt-workflow.yaml b/helm-charts/xos-profiles/ponsim-pod/tosca/tt-workflow/010-tt-workflow.yaml new file mode 100644 index 0000000..c7a0bd7 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/tosca/tt-workflow/010-tt-workflow.yaml @@ -0,0 +1,43 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary 010-tt-workflow.yaml http://10.90.0.101:30007/run + +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/servicedependency.yaml + - custom_types/voltservice.yaml + - custom_types/ttworkflowdriverwhitelistentry.yaml + - custom_types/ttworkflowdriverservice.yaml +description: Create an instance of the OSS Service and connect it to the vOLT Service +topology_template: + node_templates: + + service#tt: + type: tosca.nodes.TtWorkflowDriverService + properties: + name: tt-workflow-driver + must-exist: true + + whitelist: + type: tosca.nodes.TtWorkflowDriverWhiteListEntry + properties: + serial_number: PSMO12345678 + device_id: of:0000aabbccddeeff + pon_port_id: 1 + requirements: + - owner: + node: service#tt + relationship: tosca.relationships.BelongsToOne diff --git a/helm-charts/xos-profiles/ponsim-pod/values.yaml b/helm-charts/xos-profiles/ponsim-pod/values.yaml new file mode 100644 index 0000000..5cd5f22 --- /dev/null +++ b/helm-charts/xos-profiles/ponsim-pod/values.yaml @@ -0,0 +1,39 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the ponsim-pod profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +# Supported workflows: att-workflow (AT&T) or tt-workflow (Turk Telekom) +workflow: att-workflow + +bandwidthProfiles: True diff --git a/helm-charts/xos-profiles/rcord-lite/.helmignore b/helm-charts/xos-profiles/rcord-lite/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-profiles/rcord-lite/Chart.yaml b/helm-charts/xos-profiles/rcord-lite/Chart.yaml new file mode 100644 index 0000000..5bb81ee --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: rcord-lite +description: A Helm chart for XOS's "rcord-lite" profile +icon: https://guide.opencord.org/logos/cord.svg +version: 1.1.0 + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/xos-profiles/rcord-lite/requirements.yaml b/helm-charts/xos-profiles/rcord-lite/requirements.yaml new file mode 100644 index 0000000..a63d5c3 --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/requirements.yaml @@ -0,0 +1,37 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: rcord + version: 1.0.14 + repository: file://../../xos-services/rcord +- name: onos-service + version: 2.1.0 + repository: file://../../xos-services/onos-service +- name: fabric + version: 2.2.0 + repository: file://../../xos-services/fabric +- name: volt + version: 2.2.0 + repository: file://../../xos-services/volt +- name: vsg-hw + version: 1.1.0 + repository: file://../../xos-services/vsg-hw +- name: vrouter + version: 2.1.0 + repository: file://../../xos-services/vrouter +- name: sadis-server + version: 1.0.2 + repository: file://../../sadis-server diff --git a/helm-charts/xos-profiles/rcord-lite/templates/_helpers.tpl b/helm-charts/xos-profiles/rcord-lite/templates/_helpers.tpl new file mode 100644 index 0000000..8a503d0 --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/templates/_helpers.tpl @@ -0,0 +1,51 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "rcord-lite.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 "rcord-lite.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "rcord-lite.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +The R-CORD synchronizer loads R-CORD-specific models into the core +*/}} diff --git a/helm-charts/xos-profiles/rcord-lite/templates/_tosca.tpl b/helm-charts/xos-profiles/rcord-lite/templates/_tosca.tpl new file mode 100644 index 0000000..41e6d0f --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/templates/_tosca.tpl @@ -0,0 +1,385 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} + +{{- define "rcord-lite.onosTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/onosapp.yaml + - custom_types/onosservice.yaml + - custom_types/serviceinstanceattribute.yaml +description: ONOS service and app for fabric +topology_template: + node_templates: + service#ONOS: + type: tosca.nodes.ONOSService + properties: + name: ONOS + kind: data + rest_hostname: {{ .onosRestService | quote }} + rest_port: 8181 + + onos_app#segmentrouting: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.segmentrouting + app_id: org.onosproject.segmentrouting + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#vrouter: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.vrouter + app_id: org.onosproject.vrouter + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#netcfghostprovider: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.netcfghostprovider + app_id: org.onosproject.netcfghostprovider + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#openflow: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.openflow + app_id: org.onosproject.openflow + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#openflow-base: + type: tosca.nodes.ONOSApp + properties: + name: openflow-base + app_id: org.onosproject.openflow-base + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#hostprovider: + type: tosca.nodes.ONOSApp + properties: + name: hostprovider + app_id: org.onosproject.hostprovider + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#cord-config: + type: tosca.nodes.ONOSApp + properties: + name: cord-config + app_id: org.opencord.config + url: {{ .cordConfigAppURL }} + version: 1.4.0 + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#olt: + type: tosca.nodes.ONOSApp + properties: + name: olt + app_id: org.opencord.olt + url: {{ .oltAppUrl }} + version: 2.0.0.SNAPSHOT + dependencies: org.opencord.config + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#sadis: + type: tosca.nodes.ONOSApp + properties: + name: sadis + app_id: org.opencord.sadis + url: {{ .sadisAppUrl }} + version: 2.1.0 + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#dhcpl2relay: + type: tosca.nodes.ONOSApp + properties: + name: dhcpl2relay + app_id: org.opencord.dhcpl2relay + url: {{ .dhcpl2relayAppUrl }} + version: 1.5.0.SNAPSHOT + dependencies: org.opencord.sadis + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#aaa: + type: tosca.nodes.ONOSApp + properties: + name: aaa + app_id: org.opencord.aaa + url: {{ .aaaAppUrl }} + version: 1.8.0.SNAPSHOT + dependencies: org.opencord.sadis + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + onos_app#kafka: + type: tosca.nodes.ONOSApp + properties: + name: kafka + app_id: org.opencord.kafka + url: {{ .kafkaAppUrl }} + version: 1.0.0.SNAPSHOT + dependencies: org.opencord.olt,org.opencord.aaa,org.opencord.dhcpl2relay + requirements: + - owner: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + # CORD-Configuration + cord-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.kafka + value: > + { + "kafka" : { + "bootstrapServers" : {{ .kafkaService | quote }} + } + } + requirements: + - service_instance: + node: onos_app#olt + relationship: tosca.relationships.BelongsToOne + + olt-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/configuration/org.opencord.olt.impl.Olt?preset=true + value: > + { + "enableDhcpOnProvisioning" : true + } + requirements: + - service_instance: + node: onos_app#olt + relationship: tosca.relationships.BelongsToOne + + dhcpl2relay-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.dhcpl2relay + value: > + { + "dhcpl2relay" : { + "useOltUplinkForServerPktInOut" : true + } + } + requirements: + - service_instance: + node: onos_app#dhcpl2relay + relationship: tosca.relationships.BelongsToOne + + aaa-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.aaa + value: > + { + "AAA" : { + "radiusConnectionType" : "socket", + "radiusHost" : "freeradius.voltha.svc.cluster.local", + "radiusServerPort" : "1812", + "radiusSecret" : "SECRET" + } + } + requirements: + - service_instance: + node: onos_app#aaa + relationship: tosca.relationships.BelongsToOne + + sadis-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.sadis + value: > + { + "sadis" : { + "integration" : { + "cache" : { + "maxsize" : 1000 + }, + "url" : "http://sadis-service:8000/subscriber/%s" + } + } + } + requirements: + - service_instance: + node: onos_app#sadis + relationship: tosca.relationships.BelongsToOne +{{- end -}} + +{{- define "rcord-lite.serviceGraphTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/fabricservice.yaml + - custom_types/onosservice.yaml + - custom_types/rcordservice.yaml + - custom_types/vrouterservice.yaml + - custom_types/voltservice.yaml + - custom_types/vsghwservice.yaml + - custom_types/servicedependency.yaml + - custom_types/servicegraphconstraint.yaml +description: rcord-lite service graph +topology_template: + node_templates: + +# These services must be defined before loading the graph + + service#ONOS: + type: tosca.nodes.ONOSService + properties: + name: ONOS + must-exist: true + + service#fabric: + type: tosca.nodes.FabricService + properties: + name: fabric + must-exist: true + + service#rcord: + type: tosca.nodes.RCORDService + properties: + name: rcord + must-exist: true + + service#vrouter: + type: tosca.nodes.VRouterService + properties: + name: vrouter + must-exist: true + + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + must-exist: true + + service#vsg-hw: + type: tosca.nodes.VSGHWService + properties: + name: vsg-hw + must-exist: true + +# The rcord-lite service graph + + service_dependency#onos-fabric_fabric: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#fabric + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + service_dependency#rcord_volt: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#rcord + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + service_dependency#onos_voltha_volt: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + service_dependency#fabric_vrouter: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#vrouter + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#fabric + relationship: tosca.relationships.BelongsToOne + + service_dependency#volt_vsg-hw: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#vsg-hw + relationship: tosca.relationships.BelongsToOne + + service_dependency#onos_fabric_vsg-hw: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#vsg-hw + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#ONOS + relationship: tosca.relationships.BelongsToOne + + constraints: + type: tosca.nodes.ServiceGraphConstraint + properties: + constraints: '[[null, "rcord"], [null, "volt"], ["ONOS", "vsg-hw"], ["fabric", null], ["vrouter", null]]' +{{- end -}} diff --git a/helm-charts/xos-profiles/rcord-lite/templates/tests/test-rcord-lite-api.yaml b/helm-charts/xos-profiles/rcord-lite/templates/tests/test-rcord-lite-api.yaml new file mode 100644 index 0000000..a17884f --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/templates/tests/test-rcord-lite-api.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: "{{ .Release.Name }}-api-test" + annotations: + "helm.sh/hook": test-success +spec: + restartPolicy: Never + containers: + - name: {{ .Release.Name }}-api-test + image: {{ .Values.global.registry }}{{ .Values.images.xos_api_tester.repository }}:{{ tpl .Values.images.xos_api_tester.tag . }} + imagePullPolicy: {{ .Values.images.xos_api_tester.pullPolicy }} + volumeMounts: + - name: log-volume + mountPath: /src/cord-api/Tests/Log/ + env: + - name: SERVER_IP + value: 'xos-chameleon' + - name: SERVER_PORT + value: '9101' + - name: XOS_USER + value: {{ .Values.xosAdminUser | quote }} + - name: XOS_PASSWD + value: {{ .Values.xosAdminPassword | quote}} + command: ["pybot", "-L", "TRACE", "-d", "Log", "-T", "VOLTDevice_Test.txt", "RCORDLite_E2ETest.txt"] + volumes: + - name: log-volume + hostPath: + path: /tmp/helm_test_rcord_lite_logs_{{ dateInZone "20060102T030405.00Z" (now) "UTC" }} + type: DirectoryOrCreate diff --git a/helm-charts/xos-profiles/rcord-lite/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/rcord-lite/templates/tosca-configmap.yaml new file mode 100644 index 0000000..3321ce9 --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/templates/tosca-configmap.yaml @@ -0,0 +1,35 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: rcord-lite-tosca +data: + 020-rcord-subscriber-service.yaml: | +{{ include "rcord.serviceTosca" .Values.rcord | indent 4 }} + 030-volt-service.yaml: | +{{ include "volt.serviceTosca" .Values.volt | indent 4 }} + 040-vsg-hw-service.yaml: | +{{ include "vsg-hw.serviceTosca" (index .Values "vsg-hw") | indent 4 }} + 050-vrouter-service.yaml: | +{{ include "vrouter.serviceTosca" .Values.vrouter | indent 4 }} + 060-onos-service-fabric.yaml: | +{{ include "rcord-lite.onosTosca" .Values | indent 4 }} + 070-fabric-service.yaml: | +{{ include "fabric.serviceTosca" .Values.fabric | indent 4 }} + 300-service-graph.yaml: | +{{ include "rcord-lite.serviceGraphTosca" . | indent 4 }} diff --git a/helm-charts/xos-profiles/rcord-lite/templates/tosca-job.yaml b/helm-charts/xos-profiles/rcord-lite/templates/tosca-job.yaml new file mode 100644 index 0000000..d1a83a2 --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/templates/tosca-job.yaml @@ -0,0 +1,55 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "rcord-lite.fullname" . }}-tosca-loader + labels: + app: {{ template "rcord-lite.name" . }} + chart: {{ template "rcord-lite.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + backoffLimit: 12 + template: + metadata: + labels: + app: {{ template "rcord-lite.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.images.tosca_loader.repository }}:{{ tpl .Values.images.tosca_loader.tag . }} + imagePullPolicy: {{ .Values.images.tosca_loader.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: rcord-lite-tosca + mountPath: /opt/tosca + volumes: + - name: rcord-lite-tosca + configMap: + name: rcord-lite-tosca diff --git a/helm-charts/xos-profiles/rcord-lite/values.yaml b/helm-charts/xos-profiles/rcord-lite/values.yaml new file mode 100644 index 0000000..33a1135 --- /dev/null +++ b/helm-charts/xos-profiles/rcord-lite/values.yaml @@ -0,0 +1,53 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the rcord-lite profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +images: + tosca_loader: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + xos_api_tester: + repository: 'xosproject/xos-api-tester' + tag: 'master' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +cordConfigAppURL: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/cord-config/1.4.0/cord-config-1.4.0.oar" +vtnAppURL: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/vtn/1.6.0/vtn-1.6.0.oar" + +# onos-voltha applications +oltAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=olt-app&v=2.0.0-SNAPSHOT&e=oar" +sadisAppUrl: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/sadis-app/2.1.0/sadis-app-2.1.0.oar" +dhcpl2relayAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=dhcpl2relay&v=1.5.0-SNAPSHOT&e=oar" +aaaAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=aaa&v=1.8.0-SNAPSHOT&e=oar" +kafkaAppUrl: "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opencord&a=kafka&v=1.0.0-SNAPSHOT&e=oar" + +onosRestService: "onos-ui.default.svc.cluster.local" +kafkaService: "cord-kafka.default.svc.cluster.local:9092" diff --git a/helm-charts/xos-profiles/seba-services/Chart.yaml b/helm-charts/xos-profiles/seba-services/Chart.yaml new file mode 100644 index 0000000..eed0129 --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +name: seba-services +description: A Helm chart for XOS's "SEBA" profile +icon: https://guide.opencord.org/logos/cord.svg +version: 1.2.1 + +# xosproject/tosca-loader version +appVersion: 1.3.0 diff --git a/helm-charts/xos-profiles/seba-services/requirements.yaml b/helm-charts/xos-profiles/seba-services/requirements.yaml new file mode 100644 index 0000000..fbe7ee6 --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/requirements.yaml @@ -0,0 +1,36 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +dependencies: +- name: rcord + version: 1.0.14 + repository: file://../../xos-services/rcord +- name: onos-service + version: 2.1.0 + repository: file://../../xos-services/onos-service + condition: onos-service.enabled +- name: fabric + version: 2.2.0 + repository: file://../../xos-services/fabric + condition: fabric.enabled +- name: volt + version: 2.2.0 + repository: file://../../xos-services/volt +- name: fabric-crossconnect + version: 1.2.0 + repository: file://../../xos-services/fabric-crossconnect +- name: sadis-server + version: 1.0.2 + repository: file://../../sadis-server diff --git a/helm-charts/xos-profiles/seba-services/templates/_helpers.tpl b/helm-charts/xos-profiles/seba-services/templates/_helpers.tpl new file mode 100644 index 0000000..6519e2f --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "seba-services.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 "seba-services.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "seba-services.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/xos-profiles/seba-services/templates/_tosca.tpl b/helm-charts/xos-profiles/seba-services/templates/_tosca.tpl new file mode 100644 index 0000000..712f176 --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/templates/_tosca.tpl @@ -0,0 +1,357 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "seba-services.onosTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/onosapp.yaml + - custom_types/onosservice.yaml + - custom_types/serviceinstanceattribute.yaml + +description: Configures the VOLTHA ONOS service + +topology_template: + node_templates: + + service#onos: + type: tosca.nodes.ONOSService + properties: + name: onos + kind: data + rest_hostname: {{ .onosRestService | quote }} + rest_port: 8181 + + onos_app#openflow-base: + type: tosca.nodes.ONOSApp + properties: + name: openflow-base + app_id: org.onosproject.openflow-base + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#hostprovider: + type: tosca.nodes.ONOSApp + properties: + name: hostprovider + app_id: org.onosproject.hostprovider + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#olt: + type: tosca.nodes.ONOSApp + properties: + name: olt + app_id: org.opencord.olt + url: {{ .oltAppUrl }} + version: {{ .oltAppVersion }} + dependencies: org.opencord.sadis + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#sadis: + type: tosca.nodes.ONOSApp + properties: + name: sadis + app_id: org.opencord.sadis + url: {{ .sadisAppUrl }} + version: {{ .sadisAppVersion }} + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#dhcpl2relay: + type: tosca.nodes.ONOSApp + properties: + name: dhcpl2relay + app_id: org.opencord.dhcpl2relay + url: {{ .dhcpl2relayAppUrl }} + version: {{ .dhcpl2relayAppVersion }} + dependencies: org.opencord.sadis + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#kafka: + type: tosca.nodes.ONOSApp + properties: + name: kafka + app_id: org.opencord.kafka + url: {{ .kafkaAppUrl }} + version: {{ .kafkaAppVersion }} + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + # CORD-Configuration + kafka-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.kafka + value: > + { + "kafka" : { + "bootstrapServers" : {{ .kafkaService | quote }} + } + } + requirements: + - service_instance: + node: onos_app#kafka + relationship: tosca.relationships.BelongsToOne + + sadis-config-attr: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: /onos/v1/network/configuration/apps/org.opencord.sadis + value: > + { + "sadis" : { + "integration" : { + "cache" : { + "maxsize" : 1000, + "ttl": "PT300S" + }, + "url" : "http://sadis-service:8000/subscriber/%s" + } + }, + "bandwidthprofile":{ + "integration":{ + "url": "http://sadis-service:8000/bandwidthprofiles/%s", + "cache":{ + "enabled":true, + "maxsize":40, + "ttl":"PT1m" + } + } + } + } + requirements: + - service_instance: + node: onos_app#sadis + relationship: tosca.relationships.BelongsToOne + + onos_app#segmentrouting: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.segmentrouting + app_id: org.onosproject.segmentrouting + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#netcfghostprovider: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.netcfghostprovider + app_id: org.onosproject.netcfghostprovider + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + onos_app#openflow: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.openflow + app_id: org.onosproject.openflow + requirements: + - owner: + node: service#onos + relationship: tosca.relationships.BelongsToOne +{{- end -}} + +{{- define "seba-services.basicFixturesTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Some basic fixtures +imports: + - custom_types/networkparametertype.yaml + - custom_types/networktemplate.yaml +topology_template: + node_templates: + +# ----------------------------------------------------------------------------- +# Network Parameter Types +# ----------------------------------------------------------------------------- + s_tag: + type: tosca.nodes.NetworkParameterType + properties: + name: s_tag + c_tag: + type: tosca.nodes.NetworkParameterType + properties: + name: c_tag + next_hop: + type: tosca.nodes.NetworkParameterType + properties: + name: next_hop + device: + type: tosca.nodes.NetworkParameterType + properties: + name: device + bridge: + type: tosca.nodes.NetworkParameterType + properties: + name: bridge + neutron_port_name: + type: tosca.nodes.NetworkParameterType + properties: + name: neutron_port_name + +# ----------------------------------------------------------------------------- +# Network Templates +# ----------------------------------------------------------------------------- + Private: + type: tosca.nodes.NetworkTemplate + properties: + name: Private + visibility: private + translation: none + + Public shared IPv4: + type: tosca.nodes.NetworkTemplate + properties: + name: Public shared IPv4 + visibility: private + translation: NAT + shared_network_name: nat-net + + Public dedicated IPv4: + type: tosca.nodes.NetworkTemplate + properties: + name: Public dedicated IPv4 + visibility: public + translation: none + shared_network_name: ext-net + +{{- end -}} + + +{{- define "seba-services.serviceGraphTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/fabricservice.yaml + - custom_types/onosservice.yaml + - custom_types/rcordservice.yaml + - custom_types/voltservice.yaml + - custom_types/fabriccrossconnectservice.yaml + - custom_types/servicedependency.yaml + - custom_types/servicegraphconstraint.yaml +description: seba service graph +topology_template: + node_templates: + +# These services must be defined before loading the graph + + service#onos: + type: tosca.nodes.ONOSService + properties: + name: onos + must-exist: true + + service#fabric: + type: tosca.nodes.FabricService + properties: + name: fabric + must-exist: true + + service#rcord: + type: tosca.nodes.RCORDService + properties: + name: rcord + must-exist: true + + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + must-exist: true + + service#fabric-crossconnect: + type: tosca.nodes.FabricCrossconnectService + properties: + name: fabric-crossconnect + must-exist: true + + service_dependency#onos-fabric_fabric: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#fabric + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#onos + relationship: tosca.relationships.BelongsToOne + + service_dependency#rcord_volt: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#rcord + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + service_dependency#onos_volt: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#onos + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + + service_dependency#volt_fabric-crossconnect: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#volt + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#fabric-crossconnect + relationship: tosca.relationships.BelongsToOne + + service_dependency#onos_fabric-crossconnect: + type: tosca.nodes.ServiceDependency + properties: + connect_method: none + requirements: + - subscriber_service: + node: service#fabric-crossconnect + relationship: tosca.relationships.BelongsToOne + - provider_service: + node: service#onos + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/xos-profiles/seba-services/templates/tests/test-att-workflow.yaml b/helm-charts/xos-profiles/seba-services/templates/tests/test-att-workflow.yaml new file mode 100644 index 0000000..f029cf3 --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/templates/tests/test-att-workflow.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: "{{ .Release.Name }}-api-test" + annotations: + "helm.sh/hook": test-success +spec: + restartPolicy: Never + containers: + - name: {{ .Release.Name }}-api-test + image: {{ .Values.global.registry }}{{ .Values.images.xos_api_tester.repository }}:{{ tpl .Values.images.xos_api_tester.tag . }} + imagePullPolicy: {{ .Values.images.xos_api_tester.pullPolicy }} + volumeMounts: + - name: log-volume + mountPath: /src/cord-api/Tests/Log/ + env: + - name: SERVER_IP + value: 'xos-chameleon' + - name: SERVER_PORT + value: '9101' + - name: XOS_USER + value: {{ .Values.xosAdminUser | quote }} + - name: XOS_PASSWD + value: {{ .Values.xosAdminPassword | quote}} + command: ["pybot", "-L", "TRACE", "-d", "Log", "-T", "WorkflowValidations/ATT_Workflow.robot"] + volumes: + - name: log-volume + hostPath: + path: /tmp/helm_test_attworkflow_logs_{{ dateInZone "20060102T030405.00Z" (now) "UTC" }} + type: DirectoryOrCreate diff --git a/helm-charts/xos-profiles/seba-services/templates/tosca-configmap.yaml b/helm-charts/xos-profiles/seba-services/templates/tosca-configmap.yaml new file mode 100644 index 0000000..3b78537 --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/templates/tosca-configmap.yaml @@ -0,0 +1,35 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: seba-services-tosca +data: + 020-rcord-subscriber-service.yaml: | +{{ include "rcord.serviceTosca" .Values.rcord | indent 4 }} + 030-volt-service.yaml: | +{{ include "volt.serviceTosca" .Values.volt | indent 4 }} + 040-fabric-crossconnect-service.yaml: | +{{ include "fabric-crossconnect.serviceTosca" (index .Values "fabric-crossconnect") | indent 4 }} + 061-onos-service.yaml: | +{{ include "seba-services.onosTosca" .Values | indent 4 }} +{{- if .Values.fabric.enabled }} + 070-fabric-service.yaml: | +{{ include "fabric.serviceTosca" .Values.fabric | indent 4 }} +{{- end }} + 300-service-graph.yaml: | +{{ include "seba-services.serviceGraphTosca" . | indent 4 }} diff --git a/helm-charts/xos-profiles/seba-services/templates/tosca-job.yaml b/helm-charts/xos-profiles/seba-services/templates/tosca-job.yaml new file mode 100644 index 0000000..8317c08 --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/templates/tosca-job.yaml @@ -0,0 +1,55 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "seba-services.fullname" . }}-tosca-loader + labels: + app: {{ template "seba-services.name" . }} + chart: {{ template "seba-services.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + backoffLimit: 12 + template: + metadata: + labels: + app: {{ template "seba-services.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/tosca-configmap.yaml") . | sha256sum }} + spec: + restartPolicy: OnFailure + containers: + - name: {{ .Chart.Name }}-tosca-loader + image: {{ .Values.global.registry }}{{ .Values.images.tosca_loader.repository }}:{{ tpl .Values.images.tosca_loader.tag . }} + imagePullPolicy: {{ .Values.images.tosca_loader.pullPolicy }} + env: + - name: XOS_USER + value: {{ .Values.xosAdminUser }} + - name: XOS_PASSWD + valueFrom: + secretKeyRef: + name: xos-admin-passwd-secret + key: password + volumeMounts: + - name: seba-services-tosca + mountPath: /opt/tosca + volumes: + - name: seba-services-tosca + configMap: + name: seba-services-tosca diff --git a/helm-charts/xos-profiles/seba-services/values.yaml b/helm-charts/xos-profiles/seba-services/values.yaml new file mode 100644 index 0000000..fce29c4 --- /dev/null +++ b/helm-charts/xos-profiles/seba-services/values.yaml @@ -0,0 +1,62 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the seba-services profile. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +images: + tosca_loader: + repository: 'xosproject/tosca-loader' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + + xos_api_tester: + repository: 'xosproject/xos-api-tester' + tag: 'master' + pullPolicy: 'Always' + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +# ONOS applications +sadisAppUrl: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/sadis-app/2.2.0/sadis-app-2.2.0.oar" +sadisAppVersion: "2.2.0" + +dhcpl2relayAppUrl: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/dhcpl2relay/1.5.0/dhcpl2relay-1.5.0.oar" +dhcpl2relayAppVersion: "1.5.0" + +oltAppUrl: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/olt-app/2.1.0/olt-app-2.1.0.oar" +oltAppVersion: "2.1.0" + +kafkaAppUrl: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/kafka/1.0.0/kafka-1.0.0.oar" +kafkaAppVersion: "1.0.0" + +onosRestService: "onos-ui.default.svc.cluster.local" +kafkaService: "cord-kafka.default.svc.cluster.local:9092" + +# whether to install or not this shared services +fabric: + enabled: true +onos-service: + enabled: true diff --git a/helm-charts/xos-services/addressmanager/.helmignore b/helm-charts/xos-services/addressmanager/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/addressmanager/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/addressmanager/Chart.yaml b/helm-charts/xos-services/addressmanager/Chart.yaml new file mode 100644 index 0000000..dd00af2 --- /dev/null +++ b/helm-charts/xos-services/addressmanager/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: addressmanager +description: A Helm chart for XOS's "addressmanager" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.0.4 +appVersion: 2.0.4 + diff --git a/helm-charts/xos-services/addressmanager/templates/_helpers.tpl b/helm-charts/xos-services/addressmanager/templates/_helpers.tpl new file mode 100644 index 0000000..58767af --- /dev/null +++ b/helm-charts/xos-services/addressmanager/templates/_helpers.tpl @@ -0,0 +1,82 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "addressmanager.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 "addressmanager.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "addressmanager.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "addressmanager.serviceConfig" -}} +name: addressmanager +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +required_models: + - AddressManagerServiceInstance +dependency_graph: "/opt/xos/synchronizers/addressmanager/model-deps" +model_policies_dir: "/opt/xos/synchronizers/addressmanager/model_policies" +models_dir: "/opt/xos/synchronizers/addressmanager/models" +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.addressmanager + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/addressmanager/templates/configmap.yaml b/helm-charts/xos-services/addressmanager/templates/configmap.yaml new file mode 100644 index 0000000..185111b --- /dev/null +++ b/helm-charts/xos-services/addressmanager/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: addressmanager +data: + serviceConfig: | +{{ include "addressmanager.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/addressmanager/templates/deployment.yaml b/helm-charts/xos-services/addressmanager/templates/deployment.yaml new file mode 100644 index 0000000..61f1900 --- /dev/null +++ b/helm-charts/xos-services/addressmanager/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "addressmanager.fullname" . }} + labels: + app: {{ template "addressmanager.name" . }} + chart: {{ template "addressmanager.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "addressmanager.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "addressmanager.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: addressmanager-config + mountPath: /opt/xos/synchronizers/addressmanager/addressmanager_config.yaml + subPath: addressmanager_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: addressmanager-config + configMap: + name: addressmanager + items: + - key: serviceConfig + path: addressmanager_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/addressmanager/values.yaml b/helm-charts/xos-services/addressmanager/values.yaml new file mode 100644 index 0000000..cc9b4e6 --- /dev/null +++ b/helm-charts/xos-services/addressmanager/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for addressmanager. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/addressmanager-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/att-workflow-driver/.helmignore b/helm-charts/xos-services/att-workflow-driver/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/att-workflow-driver/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/att-workflow-driver/Chart.yaml b/helm-charts/xos-services/att-workflow-driver/Chart.yaml new file mode 100644 index 0000000..8028d96 --- /dev/null +++ b/helm-charts/xos-services/att-workflow-driver/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: att-workflow-driver +description: A Helm chart for XOS's "att-workflow-driver" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.0 +appVersion: 1.2.0 diff --git a/helm-charts/xos-services/att-workflow-driver/templates/_helpers.tpl b/helm-charts/xos-services/att-workflow-driver/templates/_helpers.tpl new file mode 100644 index 0000000..86daf56 --- /dev/null +++ b/helm-charts/xos-services/att-workflow-driver/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "att-workflow-driver.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 "att-workflow-driver.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "att-workflow-driver.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "att-workflow-driver.serviceConfig" -}} +name: att-workflow-driver +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.att-workflow-driver + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/att-workflow-driver/templates/_tosca.tpl b/helm-charts/xos-services/att-workflow-driver/templates/_tosca.tpl new file mode 100644 index 0000000..1e92a0c --- /dev/null +++ b/helm-charts/xos-services/att-workflow-driver/templates/_tosca.tpl @@ -0,0 +1,30 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "att-workflow-driver.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up att-workflow-driver service +imports: + - custom_types/attworkflowdriverservice.yaml + +topology_template: + node_templates: + service#att-workflow-driver: + type: tosca.nodes.AttWorkflowDriverService + properties: + name: att-workflow-driver + kind: oss +{{- end -}} diff --git a/helm-charts/xos-services/att-workflow-driver/templates/configmap.yaml b/helm-charts/xos-services/att-workflow-driver/templates/configmap.yaml new file mode 100644 index 0000000..ce09cb5 --- /dev/null +++ b/helm-charts/xos-services/att-workflow-driver/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: att-workflow-driver +data: + serviceConfig: | +{{ include "att-workflow-driver.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/att-workflow-driver/templates/deployment.yaml b/helm-charts/xos-services/att-workflow-driver/templates/deployment.yaml new file mode 100644 index 0000000..2b7b439 --- /dev/null +++ b/helm-charts/xos-services/att-workflow-driver/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "att-workflow-driver.fullname" . }} + labels: + app: {{ template "att-workflow-driver.name" . }} + chart: {{ template "att-workflow-driver.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "att-workflow-driver.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "att-workflow-driver.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: att-workflow-driver-config + mountPath: /opt/xos/synchronizers/att-workflow-driver/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: att-workflow-driver-config + configMap: + name: att-workflow-driver + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/att-workflow-driver/values.yaml b/helm-charts/xos-services/att-workflow-driver/values.yaml new file mode 100644 index 0000000..56b5516 --- /dev/null +++ b/helm-charts/xos-services/att-workflow-driver/values.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vOLT +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/att-workflow-driver-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/epc-service/.helmignore b/helm-charts/xos-services/epc-service/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/epc-service/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/epc-service/Chart.yaml b/helm-charts/xos-services/epc-service/Chart.yaml new file mode 100644 index 0000000..50fa834 --- /dev/null +++ b/helm-charts/xos-services/epc-service/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: epc-service +description: A Helm chart for XOS's "epc-service" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.3 +appVersion: 1.1.3 diff --git a/helm-charts/xos-services/epc-service/templates/_helpers.tpl b/helm-charts/xos-services/epc-service/templates/_helpers.tpl new file mode 100644 index 0000000..4d6d7d3 --- /dev/null +++ b/helm-charts/xos-services/epc-service/templates/_helpers.tpl @@ -0,0 +1,78 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "epc-service.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 "epc-service.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "epc-service.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "epc-service.serviceConfig" -}} +name: vepc +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.epc-service + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG + +{{- end -}} diff --git a/helm-charts/xos-services/epc-service/templates/_tosca.tpl b/helm-charts/xos-services/epc-service/templates/_tosca.tpl new file mode 100644 index 0000000..bbef54b --- /dev/null +++ b/helm-charts/xos-services/epc-service/templates/_tosca.tpl @@ -0,0 +1,31 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "epc-service.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/vepcservice.yaml + +description: Configures the VEPC service + +topology_template: + node_templates: + service#vepc: + type: tosca.nodes.VEPCService + properties: + name: vepc +{{- end -}} \ No newline at end of file diff --git a/helm-charts/xos-services/epc-service/templates/configmap.yaml b/helm-charts/xos-services/epc-service/templates/configmap.yaml new file mode 100644 index 0000000..c999b28 --- /dev/null +++ b/helm-charts/xos-services/epc-service/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: epc-service +data: + serviceConfig: | +{{ include "epc-service.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/epc-service/templates/deployment.yaml b/helm-charts/xos-services/epc-service/templates/deployment.yaml new file mode 100644 index 0000000..6b487ba --- /dev/null +++ b/helm-charts/xos-services/epc-service/templates/deployment.yaml @@ -0,0 +1,76 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "epc-service.fullname" . }} + labels: + app: {{ template "epc-service.name" . }} + chart: {{ template "epc-service.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "epc-service.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "epc-service.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: epc-service-config + mountPath: /opt/xos/synchronizers/epc-service/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: epc-service-config + configMap: + name: epc-service + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/epc-service/values.yaml b/helm-charts/xos-services/epc-service/values.yaml new file mode 100644 index 0000000..5788f24 --- /dev/null +++ b/helm-charts/xos-services/epc-service/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for epc-service. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/vepc-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/exampleservice/.helmignore b/helm-charts/xos-services/exampleservice/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/exampleservice/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/exampleservice/Chart.yaml b/helm-charts/xos-services/exampleservice/Chart.yaml new file mode 100644 index 0000000..1414ace --- /dev/null +++ b/helm-charts/xos-services/exampleservice/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: exampleservice +description: A Helm chart for XOS's "exampleservice" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.2.4 +appVersion: 2.2.4 + diff --git a/helm-charts/xos-services/exampleservice/files/id_rsa b/helm-charts/xos-services/exampleservice/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/exampleservice/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/exampleservice/templates/_helpers.tpl b/helm-charts/xos-services/exampleservice/templates/_helpers.tpl new file mode 100644 index 0000000..6b1a62f --- /dev/null +++ b/helm-charts/xos-services/exampleservice/templates/_helpers.tpl @@ -0,0 +1,76 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "exampleservice.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 "exampleservice.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "exampleservice.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "exampleservice.serviceConfig" -}} +name: exampleservice +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.exampleservice + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/exampleservice/templates/_tosca.tpl b/helm-charts/xos-services/exampleservice/templates/_tosca.tpl new file mode 100644 index 0000000..0c485d8 --- /dev/null +++ b/helm-charts/xos-services/exampleservice/templates/_tosca.tpl @@ -0,0 +1,180 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "exampleservice.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/slice.yaml + - custom_types/site.yaml + - custom_types/image.yaml + - custom_types/flavor.yaml + - custom_types/network.yaml + - custom_types/networktemplate.yaml + - custom_types/networkslice.yaml + - custom_types/openstackservice.yaml + - custom_types/trustdomain.yaml + - custom_types/exampleservice.yaml + - custom_types/exampleserviceinstance.yaml + +description: configure exampleservice + +topology_template: + node_templates: + service#openstack: + type: tosca.nodes.OpenStackService + properties: + name: "OpenStack" + must-exist: true + + untrusted_trustdomain: + type: tosca.nodes.TrustDomain + properties: + name: "untrusted-openstack" + requirements: + - owner: + node: service#openstack + relationship: tosca.relationships.BelongsToOne + +# site, image, fully created in deployment.yaml + mysite: + type: tosca.nodes.Site + properties: + must-exist: true + name: {{ .cordSiteName }} + + m1.small: + type: tosca.nodes.Flavor + properties: + name: m1.small + must-exist: true + + trusty-server-multi-nic: + type: tosca.nodes.Image + properties: + name: "trusty-server-multi-nic" + container_format: "BARE" + disk_format: "QCOW2" + path: "https://github.com/opencord/platform-install/releases/download/vms/trusty-server-cloudimg-amd64-disk1.img.20170201" + +# private network template, fully created somewhere else + private: + type: tosca.nodes.NetworkTemplate + properties: + must-exist: true + name: Private + +# management networks, fully created in management-net.yaml + management_network: + type: tosca.nodes.Network + properties: + must-exist: true + name: management + +# public network, fully created somewhere else + public_network: + type: tosca.nodes.Network + properties: + must-exist: true + name: public + + exampleservice_network: + type: tosca.nodes.Network + properties: + name: exampleservice_network + labels: exampleservice_private_network + requirements: + - template: + node: private + relationship: tosca.relationships.BelongsToOne + - owner: + node: exampleservice_slice + relationship: tosca.relationships.BelongsToOne + +# ExampleService Slices + exampleservice_slice: + description: Example Service Slice + type: tosca.nodes.Slice + properties: + name: exampleservice + default_isolation: vm + network: noauto + requirements: + - site: + node: mysite + relationship: tosca.relationships.BelongsToOne + - service: + node: exampleservice + relationship: tosca.relationships.BelongsToOne + - default_image: + node: trusty-server-multi-nic + relationship: tosca.relationships.BelongsToOne + - default_flavor: + node: m1.small + relationship: tosca.relationships.BelongsToOne + - trust_domain: + node: untrusted_trustdomain + relationship: tosca.relationships.BelongsToOne + +# ExampleService NetworkSlices + exampleservice_slice_management_network: + type: tosca.nodes.NetworkSlice + requirements: + - network: + node: management_network + relationship: tosca.relationships.BelongsToOne + - slice: + node: exampleservice_slice + relationship: tosca.relationships.BelongsToOne + + exampleservice_slice_public_network: + type: tosca.nodes.NetworkSlice + requirements: + - network: + node: public_network + relationship: tosca.relationships.BelongsToOne + - slice: + node: exampleservice_slice + relationship: tosca.relationships.BelongsToOne + + exampleservice_slice_exampleservice_network: + type: tosca.nodes.NetworkSlice + requirements: + - network: + node: exampleservice_network + relationship: tosca.relationships.BelongsToOne + - slice: + node: exampleservice_slice + relationship: tosca.relationships.BelongsToOne + + exampleservice: + type: tosca.nodes.ExampleService + properties: + name: exampleservice + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/exampleservice/keys/id_rsa + service_message: hello + + exampletenant1: + type: tosca.nodes.ExampleServiceInstance + properties: + name: exampletenant1 + tenant_message: world + requirements: + - owner: + node: exampleservice + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/xos-services/exampleservice/templates/configmap.yaml b/helm-charts/xos-services/exampleservice/templates/configmap.yaml new file mode 100644 index 0000000..84c030d --- /dev/null +++ b/helm-charts/xos-services/exampleservice/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: exampleservice +data: + serviceConfig: | +{{ include "exampleservice.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/exampleservice/templates/deployment.yaml b/helm-charts/xos-services/exampleservice/templates/deployment.yaml new file mode 100644 index 0000000..8a42d38 --- /dev/null +++ b/helm-charts/xos-services/exampleservice/templates/deployment.yaml @@ -0,0 +1,88 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "exampleservice.fullname" . }} + labels: + app: {{ template "exampleservice.name" . }} + chart: {{ template "exampleservice.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "exampleservice.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "exampleservice.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: exampleservice-config + mountPath: /opt/xos/synchronizers/exampleservice/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: exampleservice-keys + mountPath: /opt/xos/services/exampleservice/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: exampleservice-config + configMap: + name: exampleservice + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: exampleservice-keys + secret: + secretName: exampleservice-keys + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/exampleservice/templates/secret.yaml b/helm-charts/xos-services/exampleservice/templates/secret.yaml new file mode 100644 index 0000000..9ffe719 --- /dev/null +++ b/helm-charts/xos-services/exampleservice/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: exampleservice-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/exampleservice/values.yaml b/helm-charts/xos-services/exampleservice/values.yaml new file mode 100644 index 0000000..6fea766 --- /dev/null +++ b/helm-charts/xos-services/exampleservice/values.yaml @@ -0,0 +1,50 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for exampleservice. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: "xosproject/exampleservice-synchronizer" + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +cordSiteName: "mysite" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' diff --git a/helm-charts/xos-services/fabric-crossconnect/Chart.yaml b/helm-charts/xos-services/fabric-crossconnect/Chart.yaml new file mode 100644 index 0000000..0b26d73 --- /dev/null +++ b/helm-charts/xos-services/fabric-crossconnect/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: fabric-crossconnect +description: A Helm chart for XOS's "fabric-crossconnect" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.2.0 +appVersion: 1.2.1 diff --git a/helm-charts/xos-services/fabric-crossconnect/templates/_helpers.tpl b/helm-charts/xos-services/fabric-crossconnect/templates/_helpers.tpl new file mode 100644 index 0000000..53aae13 --- /dev/null +++ b/helm-charts/xos-services/fabric-crossconnect/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "fabric-crossconnect.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 "fabric-crossconnect.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "fabric-crossconnect.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "fabric-crossconnect.serviceConfig" -}} +name: fabric-crossconnect +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.fabric-crossconnect + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/fabric-crossconnect/templates/_tosca.tpl b/helm-charts/xos-services/fabric-crossconnect/templates/_tosca.tpl new file mode 100644 index 0000000..fcb3fd6 --- /dev/null +++ b/helm-charts/xos-services/fabric-crossconnect/templates/_tosca.tpl @@ -0,0 +1,30 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "fabric-crossconnect.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up fabric-crossconnect service +imports: + - custom_types/fabriccrossconnectservice.yaml + +topology_template: + node_templates: + service#fabric-crossconnect: + type: tosca.nodes.FabricCrossconnectService + properties: + name: fabric-crossconnect + kind: data +{{- end -}} diff --git a/helm-charts/xos-services/fabric-crossconnect/templates/configmap.yaml b/helm-charts/xos-services/fabric-crossconnect/templates/configmap.yaml new file mode 100644 index 0000000..bc030b1 --- /dev/null +++ b/helm-charts/xos-services/fabric-crossconnect/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: fabric-crossconnect +data: + serviceConfig: | +{{ include "fabric-crossconnect.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/fabric-crossconnect/templates/deployment.yaml b/helm-charts/xos-services/fabric-crossconnect/templates/deployment.yaml new file mode 100644 index 0000000..9017f21 --- /dev/null +++ b/helm-charts/xos-services/fabric-crossconnect/templates/deployment.yaml @@ -0,0 +1,76 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "fabric-crossconnect.fullname" . }} + labels: + app: {{ template "fabric-crossconnect.name" . }} + chart: {{ template "fabric-crossconnect.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "fabric-crossconnect.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "fabric-crossconnect.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: fabric-crossconnect-config + mountPath: /opt/xos/synchronizers/fabric-crossconnect/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: fabric-crossconnect-config + configMap: + name: fabric-crossconnect + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/fabric-crossconnect/values.yaml b/helm-charts/xos-services/fabric-crossconnect/values.yaml new file mode 100644 index 0000000..3e441b6 --- /dev/null +++ b/helm-charts/xos-services/fabric-crossconnect/values.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for fabric-crossconnect +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/fabric-crossconnect-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/fabric/.helmignore b/helm-charts/xos-services/fabric/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/fabric/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/fabric/Chart.yaml b/helm-charts/xos-services/fabric/Chart.yaml new file mode 100644 index 0000000..ec40e8b --- /dev/null +++ b/helm-charts/xos-services/fabric/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: fabric +description: A Helm chart for XOS's "fabric" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.2.0 +appVersion: 2.2.1 diff --git a/helm-charts/xos-services/fabric/templates/_helpers.tpl b/helm-charts/xos-services/fabric/templates/_helpers.tpl new file mode 100644 index 0000000..747aa6f --- /dev/null +++ b/helm-charts/xos-services/fabric/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "fabric.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 "fabric.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "fabric.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "fabric.serviceConfig" -}} +name: fabric +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.fabric + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/fabric/templates/_tosca.tpl b/helm-charts/xos-services/fabric/templates/_tosca.tpl new file mode 100644 index 0000000..8a5e466 --- /dev/null +++ b/helm-charts/xos-services/fabric/templates/_tosca.tpl @@ -0,0 +1,30 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "fabric.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up Fabric service +imports: + - custom_types/fabricservice.yaml + +topology_template: + node_templates: + service#fabric: + type: tosca.nodes.FabricService + properties: + name: fabric + kind: data +{{- end -}} diff --git a/helm-charts/xos-services/fabric/templates/configmap.yaml b/helm-charts/xos-services/fabric/templates/configmap.yaml new file mode 100644 index 0000000..f0299d8 --- /dev/null +++ b/helm-charts/xos-services/fabric/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: fabric +data: + serviceConfig: | +{{ include "fabric.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/fabric/templates/deployment.yaml b/helm-charts/xos-services/fabric/templates/deployment.yaml new file mode 100644 index 0000000..6c666b8 --- /dev/null +++ b/helm-charts/xos-services/fabric/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "fabric.fullname" . }} + labels: + app: {{ template "fabric.name" . }} + chart: {{ template "fabric.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "fabric.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "fabric.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: fabric-config + mountPath: /opt/xos/synchronizers/fabric/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: fabric-config + configMap: + name: fabric + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/fabric/values.yaml b/helm-charts/xos-services/fabric/values.yaml new file mode 100644 index 0000000..0a17c87 --- /dev/null +++ b/helm-charts/xos-services/fabric/values.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for fabric service. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: xosproject/fabric-synchronizer + tag: "{{ .Chart.AppVersion }}" + pullPolicy: Always + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/hippie-oss/.helmignore b/helm-charts/xos-services/hippie-oss/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/hippie-oss/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/hippie-oss/Chart.yaml b/helm-charts/xos-services/hippie-oss/Chart.yaml new file mode 100644 index 0000000..67cb52b --- /dev/null +++ b/helm-charts/xos-services/hippie-oss/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: hippie-oss +description: A Helm chart for XOS's "hippie-oss" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.3 +appVersion: 1.1.3 diff --git a/helm-charts/xos-services/hippie-oss/templates/_helpers.tpl b/helm-charts/xos-services/hippie-oss/templates/_helpers.tpl new file mode 100644 index 0000000..cfb8eda --- /dev/null +++ b/helm-charts/xos-services/hippie-oss/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "hippie-oss.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 "hippie-oss.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "hippie-oss.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "hippie-oss.serviceConfig" -}} +name: hippie-oss +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.hippie-oss + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/hippie-oss/templates/_tosca.tpl b/helm-charts/xos-services/hippie-oss/templates/_tosca.tpl new file mode 100644 index 0000000..675bcc9 --- /dev/null +++ b/helm-charts/xos-services/hippie-oss/templates/_tosca.tpl @@ -0,0 +1,30 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "hippie-oss.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up hippie-oss service +imports: + - custom_types/hippieossservice.yaml + +topology_template: + node_templates: + service#hippie-oss: + type: tosca.nodes.HippieOSSService + properties: + name: hippie-oss + kind: oss +{{- end -}} diff --git a/helm-charts/xos-services/hippie-oss/templates/configmap.yaml b/helm-charts/xos-services/hippie-oss/templates/configmap.yaml new file mode 100644 index 0000000..492fcae --- /dev/null +++ b/helm-charts/xos-services/hippie-oss/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: hippie-oss +data: + serviceConfig: | +{{ include "hippie-oss.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/hippie-oss/templates/deployment.yaml b/helm-charts/xos-services/hippie-oss/templates/deployment.yaml new file mode 100644 index 0000000..ed3d534 --- /dev/null +++ b/helm-charts/xos-services/hippie-oss/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "hippie-oss.fullname" . }} + labels: + app: {{ template "hippie-oss.name" . }} + chart: {{ template "hippie-oss.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "hippie-oss.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "hippie-oss.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: hippie-oss-config + mountPath: /opt/xos/synchronizers/hippie-oss/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: hippie-oss-config + configMap: + name: hippie-oss + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/hippie-oss/values.yaml b/helm-charts/xos-services/hippie-oss/values.yaml new file mode 100644 index 0000000..46f89c6 --- /dev/null +++ b/helm-charts/xos-services/hippie-oss/values.yaml @@ -0,0 +1,44 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vOLT +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/hippie-oss-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/hssdb/.helmignore b/helm-charts/xos-services/hssdb/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/hssdb/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/hssdb/Chart.yaml b/helm-charts/xos-services/hssdb/Chart.yaml new file mode 100644 index 0000000..e1b959d --- /dev/null +++ b/helm-charts/xos-services/hssdb/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: hssdb +description: A Helm chart for XOS's "hssdb" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.2 +appVersion: 1.0.2 + diff --git a/helm-charts/xos-services/hssdb/files/id_rsa b/helm-charts/xos-services/hssdb/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/hssdb/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/hssdb/templates/_helpers.tpl b/helm-charts/xos-services/hssdb/templates/_helpers.tpl new file mode 100644 index 0000000..8733e55 --- /dev/null +++ b/helm-charts/xos-services/hssdb/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "hssdb.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 "hssdb.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "hssdb.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "hssdb.serviceConfig" -}} +name: hssdb +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.hssdb + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/hssdb/templates/_tosca.tpl b/helm-charts/xos-services/hssdb/templates/_tosca.tpl new file mode 100644 index 0000000..ecae8da --- /dev/null +++ b/helm-charts/xos-services/hssdb/templates/_tosca.tpl @@ -0,0 +1,62 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "hssdb.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/hssdbservice.yaml + - custom_types/hssdbvendor.yaml + - custom_types/flavor.yaml + - custom_types/image.yaml + +description: Configures the HSSDB service + +topology_template: + node_templates: + + service#hssdb: + type: tosca.nodes.HSSDBService + properties: + name: hssdb + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/hssdb/keys/id_rsa + + sprint_hssdb: + type: tosca.nodes.HSSDBVendor + properties: + name: sprint_hssdb_{{ .vnfImageVersion }} + requirements: + - image: + node: image_hssdb + relationship: tosca.relationships.BelongsToOne + - flavor: + node: {{ .vnfImageFlavor }} + relationship: tosca.relationships.BelongsToOne + + image_hssdb: + type: tosca.nodes.Image + properties: + name: image_hssdb_{{ .vnfImageVersion }} + disk_format: QCOW2 + container_format: BARE + path: {{ .vnfImageURL }} + + {{ .vnfImageFlavor }}: + type: tosca.nodes.Flavor + properties: + name: {{ .vnfImageFlavor }} +{{- end -}} diff --git a/helm-charts/xos-services/hssdb/templates/configmap.yaml b/helm-charts/xos-services/hssdb/templates/configmap.yaml new file mode 100644 index 0000000..81b880d --- /dev/null +++ b/helm-charts/xos-services/hssdb/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: hssdb +data: + serviceConfig: | +{{ include "hssdb.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/hssdb/templates/deployment.yaml b/helm-charts/xos-services/hssdb/templates/deployment.yaml new file mode 100644 index 0000000..a71be99 --- /dev/null +++ b/helm-charts/xos-services/hssdb/templates/deployment.yaml @@ -0,0 +1,91 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "hssdb.fullname" . }} + labels: + app: {{ template "hssdb.name" . }} + chart: {{ template "hssdb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "hssdb.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "hssdb.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: hssdb-config + mountPath: /opt/xos/synchronizers/hssdb/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: hssdb-keys + mountPath: /opt/xos/services/hssdb/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: hssdb-config + configMap: + name: hssdb + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: hssdb-keys + secret: + secretName: hssdb-keys + defaultMode: 256 + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/hssdb/templates/secret.yaml b/helm-charts/xos-services/hssdb/templates/secret.yaml new file mode 100644 index 0000000..3cc52d9 --- /dev/null +++ b/helm-charts/xos-services/hssdb/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: hssdb-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/hssdb/values.yaml b/helm-charts/xos-services/hssdb/values.yaml new file mode 100644 index 0000000..410178e --- /dev/null +++ b/helm-charts/xos-services/hssdb/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for hssdb. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/hssdb-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +vnfImageURL: "https://github.com/opencord/hss_db/releases/download/vms/image-hss-db.qcow2.v0.1.1" +vnfImageVersion: "v0.1.1" +vnfImageFlavor: "m1.large" + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/internetemulator/.helmignore b/helm-charts/xos-services/internetemulator/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/internetemulator/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/internetemulator/Chart.yaml b/helm-charts/xos-services/internetemulator/Chart.yaml new file mode 100644 index 0000000..adc8e8d --- /dev/null +++ b/helm-charts/xos-services/internetemulator/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: internetemulator +description: A Helm chart for XOS's "internetemulator" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.2 +appVersion: 1.0.2 + diff --git a/helm-charts/xos-services/internetemulator/files/id_rsa b/helm-charts/xos-services/internetemulator/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/internetemulator/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/internetemulator/templates/_helpers.tpl b/helm-charts/xos-services/internetemulator/templates/_helpers.tpl new file mode 100644 index 0000000..e9b0768 --- /dev/null +++ b/helm-charts/xos-services/internetemulator/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "internetemulator.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 "internetemulator.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "internetemulator.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "internetemulator.serviceConfig" -}} +name: internetemulator +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.internetemulator + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/internetemulator/templates/_tosca.tpl b/helm-charts/xos-services/internetemulator/templates/_tosca.tpl new file mode 100644 index 0000000..53fa4c8 --- /dev/null +++ b/helm-charts/xos-services/internetemulator/templates/_tosca.tpl @@ -0,0 +1,43 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "internetemulator.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/internetemulatorservice.yaml + - custom_types/image.yaml + +description: Configures the internetemulator service + +topology_template: + node_templates: + + service#internetemulator: + type: tosca.nodes.InternetEmulatorService + properties: + name: internetemulator + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/internetemulator/keys/id_rsa + + image_internetemulator: + type: tosca.nodes.Image + properties: + name: image_internetemulator_{{ .vnfImageVersion }} + disk_format: QCOW2 + container_format: BARE + path: {{ .vnfImageURL }} +{{- end -}} diff --git a/helm-charts/xos-services/internetemulator/templates/configmap.yaml b/helm-charts/xos-services/internetemulator/templates/configmap.yaml new file mode 100644 index 0000000..6e00709 --- /dev/null +++ b/helm-charts/xos-services/internetemulator/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: internetemulator +data: + serviceConfig: | +{{ include "internetemulator.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/internetemulator/templates/deployment.yaml b/helm-charts/xos-services/internetemulator/templates/deployment.yaml new file mode 100644 index 0000000..2e57bbe --- /dev/null +++ b/helm-charts/xos-services/internetemulator/templates/deployment.yaml @@ -0,0 +1,90 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "internetemulator.fullname" . }} + labels: + app: {{ template "internetemulator.name" . }} + chart: {{ template "internetemulator.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "internetemulator.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "internetemulator.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: internetemulator-config + mountPath: /opt/xos/synchronizers/internetemulator/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: internetemulator-keys + mountPath: /opt/xos/services/internetemulator/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: internetemulator-config + configMap: + name: internetemulator + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: internetemulator-keys + secret: + secretName: internetemulator-keys + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/internetemulator/templates/secret.yaml b/helm-charts/xos-services/internetemulator/templates/secret.yaml new file mode 100644 index 0000000..dbc9fa1 --- /dev/null +++ b/helm-charts/xos-services/internetemulator/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: internetemulator-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/internetemulator/values.yaml b/helm-charts/xos-services/internetemulator/values.yaml new file mode 100644 index 0000000..48d8ae7 --- /dev/null +++ b/helm-charts/xos-services/internetemulator/values.yaml @@ -0,0 +1,51 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for internetemulator. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/internetemulator-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +vnfImageURL: "https://github.com/opencord/internetemulator/releases/download/vms/image-internetemulator.qcow2.v0.1.1" +vnfImageVersion: "v0.1.1" + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/k8sepcservice/Chart.yaml b/helm-charts/xos-services/k8sepcservice/Chart.yaml new file mode 100644 index 0000000..a8ff283 --- /dev/null +++ b/helm-charts/xos-services/k8sepcservice/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: k8sepcservice +description: A Helm chart for XOS's "k8sepcservice" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.2 +appVersion: 1.0.2 diff --git a/helm-charts/xos-services/k8sepcservice/templates/_helpers.tpl b/helm-charts/xos-services/k8sepcservice/templates/_helpers.tpl new file mode 100644 index 0000000..24269b1 --- /dev/null +++ b/helm-charts/xos-services/k8sepcservice/templates/_helpers.tpl @@ -0,0 +1,87 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vepcservice.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 "vepcservice.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vepcservice.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vepcservice.serviceConfig" -}} +name: vepcservice +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +required_models: + - VEpcService + - VEpcServiceInstance + - VEpcResourceInstanceLink + - ServiceDependency + - KubernetesService + - KubernetesResourceInstance +dependency_graph: "/opt/xos/synchronizers/vepcservice/model-deps" +steps_dir: "/opt/xos/synchronizers/vepcservice/steps" +event_steps_dir: "/opt/xos/synchronizers/vepcservice/event_steps" +sys_dir: "/opt/xos/synchronizers/vepcservice/sys" +model_policies_dir: "/opt/xos/synchronizers/vepcservice/model_policies" +models_dir: "/opt/xos/synchronizers/vepcservice/models" +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + loggers: + 'multistructlog': + handlers: + - console + - file + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/k8sepcservice/templates/_tosca.tpl b/helm-charts/xos-services/k8sepcservice/templates/_tosca.tpl new file mode 100644 index 0000000..bfda6a8 --- /dev/null +++ b/helm-charts/xos-services/k8sepcservice/templates/_tosca.tpl @@ -0,0 +1,737 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vepcservice.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/image.yaml + - custom_types/site.yaml + - custom_types/vepcservice.yaml + - custom_types/slice.yaml + - custom_types/trustdomain.yaml + +description: Configures the virtual EPC service + +topology_template: + node_templates: + + default_trustdomain: + type: tosca.nodes.TrustDomain + properties: + name: "default" + must-exist: true + + service#vepcservice: + type: tosca.nodes.VEpcService + properties: + name: vepcservice + mysite: + type: tosca.nodes.Site + properties: + name: "mysite" + must-exist: true + + vepcserviceinstance: + type: tosca.nodes.VEpcServiceInstance + properties: + name: "EPC2 for Compute" + requirements: + - owner: + node: service#vepcservice + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_ngic_configmap: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "NGIC Config Map" + resource_definition: | + apiVersion: v1 + data: + adc_rules.cfg: | + #Format - + #[ IP | IP Prefix | domain ] DROP? Sponsor-ID Service-ID Rate-Group? [Tariff-Group Tariff-Time]? + # Note: it is possible that ADC rules have conflicts & in that case rules are applied by line number... + # Rules defined first have a higher priority, unless DROP is specified (i.e. multiple rules for the same IP + # When specifying DROP with an IP address, use a prefix of 32 to prevent DNS results from overwriting rule + + 13.1.1.111 Example Internet Zero-Rate + 13.1.1.112/24 Example Management Zero-Rate + 13.1.1.113 Example Provisioning Zero-Rate + www.example.gov Example Internet Zero-Rate + www.drop_example.com DROP Example CIPA + cp_config.cfg: | + SGW_S11_IP=$(hostname) + SGW_S1U_IP=$(netstat -ie | grep -A1 s1u-net | tail -1 | awk '{print $2}' | tr -d addr:) + MGMT_INFO="-s ${SGW_S11_IP} -m ${MME_S11_IP} -w ${SGW_S1U_IP}" + APN_INFO="-i ${IP_POOL_IP} -p ${IP_POOL_MASK} -a ${APN}" + TEID_INFO="-t ${S11_TEID_POOL_START} -e ${S11_TEID_POOL_STOP} -u ${S1U_TEID_POOL_START} -o ${S1U_TEID_POOL_STOP}" + APP_ARGS="${MGMT_INFO} ${APN_INFO} ${TEID_INFO}" + + CORES="-c $(taskset -p $$ | awk '{print $NF}')" + MEMORY="-n4 --no-huge -m 4096 --file-prefix cp" + DEVICES="--no-pci" + EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}" + dp_config.cfg: | + CORES="-c $(taskset -p $$ | awk '{print $NF}')" + MEMORY="-n4 --no-huge -m 8192 --file-prefix cp" + + SGW_S1U_IP=$(netstat -ie | grep -A1 s1u-net | tail -1 | awk '{print $2}' | tr -d addr:) + SGW_SGI_IP=$(netstat -ie | grep -A1 sgi-net | tail -1 | awk '{print $2}' | tr -d addr:) + S1U_MAC=$( netstat -ie | grep -B1 $SGW_S1U_IP | head -n1 | awk '{print $5}' ) + SGI_MAC=$( netstat -ie | grep -B1 $SGW_SGI_IP | head -n1 | awk '{print $5}' ) + DEVICES="--no-pci --vdev eth_af_packet0,iface=s1u-net --vdev eth_af_packet1,iface=sgi-net" + + EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}" + + S1U="--s1u_ip ${SGW_S1U_IP} --s1u_mac ${S1U_MAC}" + SGI="--sgi_ip ${SGW_SGI_IP} --sgi_mac ${SGI_MAC} --sgi_gw_ip ${RTR_SGI_IP} --sgi_mask ${SGI_MASK}" + WORKERS="--num_workers 1" + MISC="--log 1" + + APP_ARGS="${S1U} ${SGI} ${WORKERS} ${MISC}" + interface.cfg: "; Copyright (c) 2017 Intel Corporation\n;\n; Licensed under the + Apache License, Version 2.0 (the \"License\");\n; you may not use this file except + in compliance with the License.\n; You may obtain a copy of the License at\n;\n; + \ http://www.apache.org/licenses/LICENSE-2.0\n;\n; Unless required by applicable + law or agreed to in writing, software\n; distributed under the License is distributed + on an \"AS IS\" BASIS,\n; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + express or implied.\n; See the License for the specific language governing permissions + and\n; limitations under the License.\n\n[0]\ndp_comm_ip = 127.0.0.1\ndp_comm_port + = 20\ncp_comm_ip = 127.0.0.1\ncp_comm_port = 21\n" + static_pcc.cfg: |+ + [GLOBAL] + NUM_PACKET_FILTERS = 1 + + ;default filter - must be first for now (until DP doesn't install any filters) + [PACKET_FILTER_0] + RATING_GROUP = 9 + ;Max Bit Rate (MBR) unit= bps + MBR = 512000 + + [PACKET_FILTER_1] + RATING_GROUP = 5 + MBR = 1000000 + DIRECTION = bidirectional + PRECEDENCE = 255 + IPV4_REMOTE = 13.1.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + REMOTE_LOW_LIMIT_PORT = 5060 + REMOTE_HIGH_LIMIT_PORT = 5060 + + [PACKET_FILTER_2] + RATING_GROUP = 1 + MBR = 2000000 + DIRECTION = bidirectional + PRECEDENCE = 255 + IPV4_REMOTE = 13.1.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 17000 + LOCAL_HIGH_LIMIT_PORT = 17010 + + [PACKET_FILTER_3] + RATING_GROUP = 7 + MBR = 4000000 + DIRECTION = bidirectional + PRECEDENCE = 255 + IPV4_REMOTE = 13.1.0.0 + IPV4_REMOTE_MASK = 255.255.0.0 + PROTOCOL = 17 + LOCAL_LOW_LIMIT_PORT = 8000 + LOCAL_HIGH_LIMIT_PORT = 8080 + + kind: ConfigMap + metadata: + name: ngic-config + namespace: epc2 + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_mme_service: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "MME Service" + resource_definition: | + apiVersion: v1 + kind: Service + metadata: + name: mme + namespace: epc2 + spec: + selector: + app: mme + clusterIP: None + ports: + - name: s11 + port: 2123 + protocol: UDP + - name: s1ap + port: 36412 + protocol: TCP + - name: s6a + port: 3868 + protocol: TCP + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_mme_statefulset: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "MME StatefulSet" + resource_definition: | + apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: mme + namespace: epc2 + labels: + app: mme + spec: + replicas: 1 + selector: + matchLabels: + app: mme + serviceName: "mme" + template: + metadata: + labels: + app: mme + spec: + terminationGracePeriodSeconds: 1 + initContainers: + - name: init-mme + image: "ngick8stesting/c3po-mmeinit" + command: [ "sh", "-c"] + securityContext: + capabilities: + add: + - NET_ADMIN + args: + - iptables -A OUTPUT -p sctp --sport 36412 --chunk-types any ABORT -j DROP; + until nslookup hss-0.hss.epc2.svc.cluster.local; + do echo waiting for hss; sleep 2; done; + containers: + - name: mme + image: "ngick8stesting/c3po-mme:5e2eaf6" + imagePullPolicy: Always + env: + - name: SGW_S11_IP + value: ngic-0.ngic.epc2.svc.cluster.local + - name: MME_ETH0_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: ENB_S1AP_IP + value: 10.1.11.3 + - name: CONNECT_PEER + value: hss-0.hss.epc2.svc.cluster.local + - name: VAR_HSS_REALM + value: hss.epc2.svc.cluster.local + - name: HSS_S6A_IP + value: hss-0.hss.epc2.svc.cluster.local + - name: HSS_PORT + value: "3868" + + stdin: true + tty: true + #command: [ "sleep", "3600"] + #volumeMounts: + #- name: config-volume + # mountPath: /opt/ngic/config + #- name: scripts-volume + # mountPath: /opt/ngic/scripts + #- name: hugepage + # mountPath: /dev/hugepages + resources: + limits: + cpu: 3 + memory: 1Gi + #volumes: + # - name: config-volume + # configMap: + # name: ngic-config + # - name: scripts-volume + # secret: + # secretName: ngic-scripts + # defaultMode: 511 + # - name: hugepage + # emptyDir: + # medium: HugePages + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_hss_service: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "HSS Service" + resource_definition: | + apiVersion: v1 + kind: Service + metadata: + name: hss + namespace: epc2 + spec: + selector: + app: hss + clusterIP: None + ports: + - name: s6a + port: 3868 + protocol: TCP + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_hss_statefulset: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "HSS StatefulSet" + resource_definition: | + apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: hss + namespace: epc2 + labels: + app: hss + spec: + replicas: 1 + selector: + matchLabels: + app: hss + serviceName: "hss" + template: + metadata: + labels: + app: hss + spec: + terminationGracePeriodSeconds: 1 + initContainers: + - name: init-db + image: "ngick8stesting/c3po-cassandra:5e2eaf6" + command: [ "bash", "-xc"] + args: + - until nslookup cassandra; do echo waiting for cassandra; sleep 2; done; + cqlsh --file /scripts/oai_db.cql cassandra; + /scripts/data_provisioning_users.sh 208014567891200 1122334455 apn1 465B5CE8B199B49FAA5F0A2EE238A6BC 100 cassandra mme-0.mme.epc2.svc.cluster.local mme.epc2.svc.cluster.local; + /scripts/data_provisioning_mme.sh 1 19136246000 mme-0.mme.epc2.svc.cluster.local mme.epc2.svc.cluster.local 1 cassandra; + /scripts/data_provisioning_mme.sh 1 19136246000 smsrouter.test3gpp.net test3gpp.net 0 cassandra; + containers: + - name: hss + image: "ngick8stesting/c3po-hss:5e2eaf6" + imagePullPolicy: Always + env: + - name: CASSANDRA_ADDR + value: cassandra + - name: MME_ADDR + value: mme-0.mme.epc2.svc.cluster.local + #command: [ "sleep", "3600"] + resources: + limits: + cpu: 3 + memory: 1Gi + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_hssdb_service: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "HSS Cassandra Service" + resource_definition: | + apiVersion: v1 + kind: Service + metadata: + labels: + app: cassandra + name: cassandra + namespace: epc2 + spec: + clusterIP: None + ports: + - port: 9042 + selector: + app: cassandra + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_hssdb_statefulset: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "HSS Cassandra StatefulSet" + resource_definition: | + apiVersion: "apps/v1" + kind: StatefulSet + metadata: + name: cassandra + namespace: epc2 + labels: + app: cassandra + spec: + serviceName: cassandra + replicas: 1 # 3 + selector: + matchLabels: + app: cassandra + template: + metadata: + labels: + app: cassandra + spec: + terminationGracePeriodSeconds: 1 + containers: + - name: cassandra + image: ngick8stesting/c3po-cassandra:5e2eaf6 + imagePullPolicy: Always + ports: + - containerPort: 7000 + name: intra-node + - containerPort: 7001 + name: tls-intra-node + - containerPort: 7199 + name: jmx + - containerPort: 9042 + name: cql + resources: + limits: + cpu: "3" + memory: 4Gi + # Probably Cassandra:3.x? + #securityContext: + # capabilities: + # add: + # - IPC_LOCK + # Later + #lifecycle: + # preStop: + # exec: + # command: + # - /bin/sh + # - -c + # - nodetool drain + env: + # Performance optimizations + - name: MAX_HEAP_SIZE + value: 512M + - name: HEAP_NEWSIZE + value: 100M + - name: CASSANDRA_SEEDS + value: "cassandra-0.cassandra.epc2.svc.cluster.local" + - name: CASSANDRA_CLUSTER_NAME + value: "HSS Cluster" + - name: CASSANDRA_RPC_ADDRESS + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: CASSANDRA_ENDPOINT_SNITCH + value: "GossipingPropertyFileSnitch" + readinessProbe: + exec: + command: ["/bin/bash", "-c", "nodetool status -r | awk -v h=$(hostname) '$2==h {exit ($1==\"UN\" ? 0 : -1)}'"] + initialDelaySeconds: 15 + timeoutSeconds: 5 + # volumeMounts: + # - name: cassandra-data + # mountPath: /var/lib/cassandra + # volumeClaimTemplates: + # - metadata: + # name: cassandra-data + # spec: + # accessModes: [ "ReadWriteOnce" ] + # resources: + # requests: + # storage: 1Gi + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_spgwcu_service: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "SPGW Control and User Service" + resource_definition: | + apiVersion: v1 + kind: Service + metadata: + name: ngic + namespace: epc2 + spec: + selector: + app: ngic + clusterIP: None + ports: + - name: s11 + port: 2123 + protocol: UDP + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + kubernetesresourceinstance_spgwcu_statefulset: + type: tosca.nodes.KubernetesResourceInstance + properties: + name: "SPGW Control and User StatefulSet" + resource_definition: | + apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: ngic + namespace: epc2 + labels: + app: ngic + spec: + replicas: 1 + selector: + matchLabels: + app: ngic + serviceName: "ngic" + template: + metadata: + labels: + app: ngic + annotations: + kubernetes.v1.cni.cncf.io/networks: '[ + { "name": "s1u-net", "interfaceRequest": "s1u-net" }, + { "name": "sgi-net", "interfaceRequest": "sgi-net" } + ]' + spec: + initContainers: + - name: init-iptables + image: "ngick8stesting/c3po-mmeinit" + command: [ "sh", "-c"] + securityContext: + capabilities: + add: + - NET_ADMIN + args: + - iptables -I OUTPUT -p icmp --icmp-type destination-unreachable -j DROP; + terminationGracePeriodSeconds: 1 + containers: + - name: ngic-cp + image: "ngick8stesting/ngic-cp:d9b315c" + stdin: true + command: [ "bash", "-cx", ". /opt/ngic/config/cp_config.cfg; ./ngic_controlplane $EAL_ARGS -- $APP_ARGS"] + #command: ["sleep", "3600"] + tty: true + env: + - name: MME_S11_IP + value: mme-0.mme.epc2.svc.cluster.local + #- name: SGW_S1U_IP # for now,this will be in our own pod + # value: "5.5.5.5" + - name: APN + value: apn1 + - name: IP_POOL_IP + value: "16.0.0.0" + - name: IP_POOL_MASK + value: "255.240.0.0" + - name: S11_TEID_POOL_START + value: "00100000" + - name: S11_TEID_POOL_STOP + value: "001fffff" + - name: S1U_TEID_POOL_START + value: "00100000" + - name: S1U_TEID_POOL_STOP + value: "001fffff" + volumeMounts: + - name: config-volume + mountPath: /opt/ngic/config + #- name: hugepage + # mountPath: /dev/hugepages + resources: + limits: + #hugepages-2Mi: 4Gi + cpu: 3 + memory: 4Gi + - name: ngic-dp + image: "ngiccorddemo/ngic-dp:k8s-bm" + stdin: true + tty: true + env: + - name: RTR_SGI_IP + value: "13.1.1.110" + - name: SGI_MASK + value: "255.255.255.0" + command: [ "bash", "-cx", ". /opt/ngic/config/dp_config.cfg ; ./ngic_dataplane $EAL_ARGS -- $APP_ARGS"] + #command: ["sleep", "3600"] + volumeMounts: + - name: config-volume + mountPath: /opt/ngic/config + #- name: hugepage + # mountPath: /dev/hugepages + resources: + limits: + #hugepages-1Gi: 8Gi + cpu: 8 + memory: 8Gi #200Mi + intel.com/sriov: '2' + securityContext: + privileged: true + capabilities: + add: + - NET_ADMIN + - IPC_LOCK + volumes: + - name: config-volume + configMap: + name: ngic-config + #- name: hugepage + # emptyDir: + # medium: HugePages + + requirements: + - owner: + node: service#kubernetes + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_ngic_configmap: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "NGIC ConfigMap Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_ngic_configmap + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_mme_service: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "MME Service Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_mme_service + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_mme_statefulset: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "MME StatefulSet Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_mme_statefulset + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_hss_service: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "HSS Service Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_hss_service + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_hss_statefulset: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "HSS StatefulSet Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_hss_statefulset + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_hssdb_service: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "HSS Cassandra Service Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_hssdb_service + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_hssdb_statefulset: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "HSS Cassandra StatefulSet Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_hssdb_statefulset + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_spgwcu_service: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "SPGW Contol and User Service Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_spgwcu_service + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne + + vepcresourceinstancelink_spgwcu_statefulset: + type: tosca.nodes.VEpcResourceInstanceLink + properties: + name: "HS SPGW Control and User StatefulSet Resource Link" + + requirements: + - resource_instance: + node: kubernetesresourceinstance_spgwcu_statefulset + relationship: tosca.relationships.BelongsToOne + - vepc_service_instance: + node: vepcserviceinstance + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/xos-services/k8sepcservice/templates/configmap.yaml b/helm-charts/xos-services/k8sepcservice/templates/configmap.yaml new file mode 100644 index 0000000..3af03d7 --- /dev/null +++ b/helm-charts/xos-services/k8sepcservice/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vepcservice +data: + serviceConfig: | +{{ include "vepcservice.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/k8sepcservice/templates/deployment.yaml b/helm-charts/xos-services/k8sepcservice/templates/deployment.yaml new file mode 100644 index 0000000..c017457 --- /dev/null +++ b/helm-charts/xos-services/k8sepcservice/templates/deployment.yaml @@ -0,0 +1,74 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vepcservice.fullname" . }} + labels: + app: {{ template "vepcservice.name" . }} + chart: {{ template "vepcservice.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vepcservice.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vepcservice.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vepcservice-config + mountPath: /opt/xos/synchronizers/vepcservice/vepcservice_config.yaml + subPath: vepcservice_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: vepcservice-config + configMap: + name: vepcservice + items: + - key: serviceConfig + path: vepcservice_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/k8sepcservice/values.yaml b/helm-charts/xos-services/k8sepcservice/values.yaml new file mode 100644 index 0000000..35ae662 --- /dev/null +++ b/helm-charts/xos-services/k8sepcservice/values.yaml @@ -0,0 +1,44 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vepcservice. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/k8sepcservice-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/kubernetes/Chart.yaml b/helm-charts/xos-services/kubernetes/Chart.yaml new file mode 100644 index 0000000..6708cf2 --- /dev/null +++ b/helm-charts/xos-services/kubernetes/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: kubernetes +description: A Helm chart for XOS's "kubernetes" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.2.0 +appVersion: 1.2.1 diff --git a/helm-charts/xos-services/kubernetes/templates/_helpers.tpl b/helm-charts/xos-services/kubernetes/templates/_helpers.tpl new file mode 100644 index 0000000..98ee611 --- /dev/null +++ b/helm-charts/xos-services/kubernetes/templates/_helpers.tpl @@ -0,0 +1,76 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "kubernetes.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 "kubernetes.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "kubernetes.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "kubernetes.serviceConfig" -}} +name: kubernetes +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.kubernetes + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/kubernetes/templates/configmap.yaml b/helm-charts/xos-services/kubernetes/templates/configmap.yaml new file mode 100644 index 0000000..96bcbf3 --- /dev/null +++ b/helm-charts/xos-services/kubernetes/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: kubernetes +data: + serviceConfig: | +{{ include "kubernetes.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/kubernetes/templates/deployment.yaml b/helm-charts/xos-services/kubernetes/templates/deployment.yaml new file mode 100644 index 0000000..83763ca --- /dev/null +++ b/helm-charts/xos-services/kubernetes/templates/deployment.yaml @@ -0,0 +1,78 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "kubernetes.fullname" . }} + labels: + app: {{ template "kubernetes.name" . }} + chart: {{ template "kubernetes.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "kubernetes.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "kubernetes.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + serviceAccountName: kubernetes-synchronizer + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: kubernetes-config + mountPath: /opt/xos/synchronizers/kubernetes/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: kubernetes-config + configMap: + name: kubernetes + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/kubernetes/values.yaml b/helm-charts/xos-services/kubernetes/values.yaml new file mode 100644 index 0000000..eb39651 --- /dev/null +++ b/helm-charts/xos-services/kubernetes/values.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for kubernetes synchronizer. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/kubernetes-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/mcord-subscriber/.helmignore b/helm-charts/xos-services/mcord-subscriber/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/mcord-subscriber/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/mcord-subscriber/Chart.yaml b/helm-charts/xos-services/mcord-subscriber/Chart.yaml new file mode 100644 index 0000000..491dcec --- /dev/null +++ b/helm-charts/xos-services/mcord-subscriber/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: mcord-subscriber +description: A Helm chart that creates a subscriber for the "mcord" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.0.5 +appVersion: 2.0.5 diff --git a/helm-charts/xos-services/mcord-subscriber/templates/_helpers.tpl b/helm-charts/xos-services/mcord-subscriber/templates/_helpers.tpl new file mode 100644 index 0000000..a8ef696 --- /dev/null +++ b/helm-charts/xos-services/mcord-subscriber/templates/_helpers.tpl @@ -0,0 +1,77 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "mcord-subscriber.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 "mcord-subscriber.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mcord-subscriber.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "mcord-subscriber.serviceConfig" -}} +name: mcord +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.mcord-subscriber + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/mcord-subscriber/templates/_tosca.tpl b/helm-charts/xos-services/mcord-subscriber/templates/_tosca.tpl new file mode 100644 index 0000000..50d2273 --- /dev/null +++ b/helm-charts/xos-services/mcord-subscriber/templates/_tosca.tpl @@ -0,0 +1,31 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "mcord-subscriber.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/mcordsubscriberservice.yaml + +description: Configures the mcord-subscriber service + +topology_template: + node_templates: + service#mcord: + type: tosca.nodes.MCordSubscriberService + properties: + name: mcord +{{- end -}} diff --git a/helm-charts/xos-services/mcord-subscriber/templates/configmap.yaml b/helm-charts/xos-services/mcord-subscriber/templates/configmap.yaml new file mode 100644 index 0000000..6f54ff8 --- /dev/null +++ b/helm-charts/xos-services/mcord-subscriber/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: mcord-subscriber +data: + serviceConfig: | +{{ include "mcord-subscriber.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/mcord-subscriber/templates/job.yaml b/helm-charts/xos-services/mcord-subscriber/templates/job.yaml new file mode 100644 index 0000000..6e1ce5e --- /dev/null +++ b/helm-charts/xos-services/mcord-subscriber/templates/job.yaml @@ -0,0 +1,72 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "mcord-subscriber.fullname" . }} + labels: + app: {{ template "mcord-subscriber.name" . }} + chart: {{ template "mcord-subscriber.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + template: + metadata: + labels: + app: {{ template "mcord-subscriber.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + restartPolicy: Never + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: mcord-subscriber-config + mountPath: /opt/xos/synchronizers/mcord/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: mcord-subscriber-config + configMap: + name: mcord-subscriber + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/mcord-subscriber/values.yaml b/helm-charts/xos-services/mcord-subscriber/values.yaml new file mode 100644 index 0000000..709c506 --- /dev/null +++ b/helm-charts/xos-services/mcord-subscriber/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for mcord-subscriber. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/mcord-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/onos-service/.helmignore b/helm-charts/xos-services/onos-service/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/onos-service/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/onos-service/Chart.yaml b/helm-charts/xos-services/onos-service/Chart.yaml new file mode 100644 index 0000000..8bb78c2 --- /dev/null +++ b/helm-charts/xos-services/onos-service/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +description: A Helm chart for XOS's "onos-service" service, which configures ONOS +name: onos-service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.1.0 +appVersion: 2.1.1 diff --git a/helm-charts/xos-services/onos-service/templates/_helpers.tpl b/helm-charts/xos-services/onos-service/templates/_helpers.tpl new file mode 100644 index 0000000..3d7d57c --- /dev/null +++ b/helm-charts/xos-services/onos-service/templates/_helpers.tpl @@ -0,0 +1,81 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "onos-service.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 "onos-service.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "onos-service.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + + +{{- define "onos-service.serviceConfig" -}} +name: onos +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.onos-service + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/onos-service/templates/_tosca.tpl b/helm-charts/xos-services/onos-service/templates/_tosca.tpl new file mode 100644 index 0000000..6f65bbb --- /dev/null +++ b/helm-charts/xos-services/onos-service/templates/_tosca.tpl @@ -0,0 +1,84 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} + +{{- define "onos-service.vtnAppTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/onosapp.yaml + - custom_types/onosservice.yaml + - custom_types/serviceinstanceattribute.yaml + +description: Configures the VTN ONOS service + +topology_template: + node_templates: + + service#ONOS_CORD: + type: tosca.nodes.ONOSService + properties: + name: ONOS_CORD + kind: data + rest_hostname: {{ .onosCordRestService | quote }} + rest_port: 8181 + + onos_app#openflow: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.openflow + app_id: org.onosproject.openflow + requirements: + - owner: + node: service#ONOS_CORD + relationship: tosca.relationships.BelongsToOne + + onos_app#dhcp: + type: tosca.nodes.ONOSApp + properties: + name: org.onosproject.dhcp + app_id: org.onosproject.dhcp + requirements: + - owner: + node: service#ONOS_CORD + relationship: tosca.relationships.BelongsToOne + + onos_app#cord-config: + type: tosca.nodes.ONOSApp + properties: + name: cord-config + app_id: org.opencord.cord-config + url: {{ .cordConfigAppURL }} + version: 1.4.0 + dependencies: org.onosproject.openflow, org.onosproject.dhcp + requirements: + - owner: + node: service#ONOS_CORD + relationship: tosca.relationships.BelongsToOne + + onos_app#vtn: + type: tosca.nodes.ONOSApp + properties: + name: vtn + app_id: org.opencord.vtn + url: {{ .vtnAppURL }} + version: 1.6.0 + dependencies: org.opencord.cord-config + requirements: + - owner: + node: service#ONOS_CORD + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/xos-services/onos-service/templates/configmap.yaml b/helm-charts/xos-services/onos-service/templates/configmap.yaml new file mode 100644 index 0000000..db13dd3 --- /dev/null +++ b/helm-charts/xos-services/onos-service/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: onos-service +data: + serviceConfig: | +{{ include "onos-service.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/onos-service/templates/deployment.yaml b/helm-charts/xos-services/onos-service/templates/deployment.yaml new file mode 100644 index 0000000..0398ee0 --- /dev/null +++ b/helm-charts/xos-services/onos-service/templates/deployment.yaml @@ -0,0 +1,76 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "onos-service.fullname" . }} + labels: + app: {{ template "onos-service.name" . }} + chart: {{ template "onos-service.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "onos-service.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "onos-service.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: onos-service-config + mountPath: /opt/xos/synchronizers/onos/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: onos-service-config + configMap: + name: onos-service + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/onos-service/values.yaml b/helm-charts/xos-services/onos-service/values.yaml new file mode 100644 index 0000000..f39612d --- /dev/null +++ b/helm-charts/xos-services/onos-service/values.yaml @@ -0,0 +1,51 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for onos-service. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/onos-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +kafkaService: "cord-kafka" + +cordConfigAppURL: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/cord-config/1.4.0/cord-config-1.4.0.oar" +vtnAppURL: "https://oss.sonatype.org/service/local/repositories/releases/content/org/opencord/vtn/1.6.0/vtn-1.6.0.oar" + +onosCordRestService: "onos-cord-ui.default.svc.cluster.local" +kafkaService: "cord-kafka.default.svc.cluster.local:9092" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/openstack/.helmignore b/helm-charts/xos-services/openstack/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/openstack/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/openstack/Chart.yaml b/helm-charts/xos-services/openstack/Chart.yaml new file mode 100644 index 0000000..ab47746 --- /dev/null +++ b/helm-charts/xos-services/openstack/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: openstack +description: A Helm chart for XOS's "openstack" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.6 +appVersion: 1.1.5 diff --git a/helm-charts/xos-services/openstack/templates/_helpers.tpl b/helm-charts/xos-services/openstack/templates/_helpers.tpl new file mode 100644 index 0000000..35f2dff --- /dev/null +++ b/helm-charts/xos-services/openstack/templates/_helpers.tpl @@ -0,0 +1,75 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "openstack.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 "openstack.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "openstack.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- define "openstack.serviceConfig" -}} +name: openstack +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.openstack + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +nova: + ca_ssl_cert: "/etc/ssl/certs/ca-certificates.crt" + enabled: True +{{- end -}} diff --git a/helm-charts/xos-services/openstack/templates/_tosca.tpl b/helm-charts/xos-services/openstack/templates/_tosca.tpl new file mode 100644 index 0000000..3adabcd --- /dev/null +++ b/helm-charts/xos-services/openstack/templates/_tosca.tpl @@ -0,0 +1,170 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "openstack.flavorTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/flavor.yaml + +description: openstack flavor models + +topology_template: + node_templates: + + m1.tiny: + type: tosca.nodes.Flavor + properties: + name: m1.tiny + flavor: m1.tiny + + m1.small: + type: tosca.nodes.Flavor + properties: + name: m1.small + flavor: m1.small + + m1.medium: + type: tosca.nodes.Flavor + properties: + name: m1.medium + flavor: m1.medium + + m1.large: + type: tosca.nodes.Flavor + properties: + name: m1.large + flavor: m1.large + + m1.xlarge: + type: tosca.nodes.Flavor + properties: + name: m1.xlarge + flavor: m1.xlarge +{{- end -}} + +{{- define "openstack.networkTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/network.yaml + - custom_types/networktemplate.yaml + - custom_types/site.yaml + - custom_types/slice.yaml + +description: openstack flavor models + +topology_template: + node_templates: + + {{ .cordSiteName }}: + type: tosca.nodes.Site + properties: + name: {{ .cordSiteName }} + must-exist: true + +# For private networks (e.g., per-slice) + private_template: + type: tosca.nodes.NetworkTemplate + properties: + name: Private + visibility: private + translation: none + vtn_kind: PRIVATE + +# management (vtn: MANAGEMENT_LOCAL) network + management_template: + type: tosca.nodes.NetworkTemplate + properties: + name: management_template + visibility: private + translation: none + vtn_kind: MANAGEMENT_LOCAL + + management: + type: tosca.nodes.Network + properties: + name: management + # ip_version: 4 + subnet: 172.27.0.0/24 + permit_all_slices: true + requirements: + - template: + node: management_template + relationship: tosca.relationships.BelongsToOne + - owner: + node: slice#{{ .cordSiteName }}_management + relationship: tosca.relationships.BelongsToOne + +# Slice to own management networks + slice#{{ .cordSiteName }}_management: + description: This slice exists solely to own the management network(s) + type: tosca.nodes.Slice + properties: + network: noauto + name: {{ .cordSiteName }}_management + requirements: + - site: + node: {{ .cordSiteName }} + relationship: tosca.relationships.BelongsToOne +{{- end -}} + +{{- define "openstack.controllerTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/controller.yaml + - custom_types/controllersite.yaml + - custom_types/deployment.yaml + - custom_types/site.yaml + - custom_types/sitedeployment.yaml + - custom_types/openstackservice.yaml + +description: openstack controller models + +topology_template: + node_templates: + + {{ .cordSiteName }}: + type: tosca.nodes.Site + properties: + name: {{ .cordSiteName }} + must-exist: true + + service#openstack: + type: tosca.nodes.OpenStackService + properties: + name: "OpenStack" + auth_url: http://keystone.openstack.svc.cluster.local/v3 + admin_user: {{ .keystoneAdminUser }} + admin_password: {{ .keystoneAdminPassword }} + admin_tenant: {{ .keystoneAdminTenant }} + + # TODO: deal with the lack of controller objects + # TODO: All of this probably ends up in OpenStack service after the refactor +# {{ .cordSiteName }}_somedeployment_openstack: +# type: tosca.nodes.Controller +# properties: +# name: {{ .cordSiteName }}_somedeployment_openstack +# backend_type: OpenStack +# version: Newton +# auth_url: http://keystone.openstack.svc.cluster.local/v3 +# admin_user: {{ .keystoneAdminUser }} +# admin_password: {{ .keystoneAdminPassword }} +# admin_tenant: {{ .keystoneAdminTenant }} +# domain: {{ .keystoneDomain }} + +{{- end -}} diff --git a/helm-charts/xos-services/openstack/templates/configmap.yaml b/helm-charts/xos-services/openstack/templates/configmap.yaml new file mode 100644 index 0000000..db369de --- /dev/null +++ b/helm-charts/xos-services/openstack/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: openstack +data: + serviceConfig: | +{{ include "openstack.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/openstack/templates/deployment.yaml b/helm-charts/xos-services/openstack/templates/deployment.yaml new file mode 100644 index 0000000..0e94850 --- /dev/null +++ b/helm-charts/xos-services/openstack/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "openstack.fullname" . }} + labels: + app: {{ template "openstack.name" . }} + chart: {{ template "openstack.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "openstack.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "openstack.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: openstack-config + mountPath: /opt/xos/synchronizers/openstack/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: openstack-config + configMap: + name: openstack + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/openstack/values.yaml b/helm-charts/xos-services/openstack/values.yaml new file mode 100644 index 0000000..e619da0 --- /dev/null +++ b/helm-charts/xos-services/openstack/values.yaml @@ -0,0 +1,44 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for addressmanager. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +imagePullPolicy: 'Always' + +image: + repository: xosproject/openstack-synchronizer + tag: "{{ .Chart.AppVersion }}" + pullPolicy: Always + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/progran/.helmignore b/helm-charts/xos-services/progran/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/progran/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/progran/Chart.yaml b/helm-charts/xos-services/progran/Chart.yaml new file mode 100644 index 0000000..3c6a715 --- /dev/null +++ b/helm-charts/xos-services/progran/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: progran +description: A Helm chart for XOS's "progran" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.0.7 +appVersion: 2.0.5 diff --git a/helm-charts/xos-services/progran/templates/_helpers.tpl b/helm-charts/xos-services/progran/templates/_helpers.tpl new file mode 100644 index 0000000..6cd742a --- /dev/null +++ b/helm-charts/xos-services/progran/templates/_helpers.tpl @@ -0,0 +1,77 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "progran.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 "progran.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "progran.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "progran.serviceConfig" -}} +name: progran +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.progran + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/progran/templates/_tosca.tpl b/helm-charts/xos-services/progran/templates/_tosca.tpl new file mode 100644 index 0000000..f952daa --- /dev/null +++ b/helm-charts/xos-services/progran/templates/_tosca.tpl @@ -0,0 +1,34 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "progran.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/progranservice.yaml + +description: Configures the progran service + +topology_template: + node_templates: + + service#progran: + type: tosca.nodes.ProgranService + properties: + name: progran + onos_address: onos-progran-ui + onos_port: "8181" +{{- end -}} diff --git a/helm-charts/xos-services/progran/templates/configmap.yaml b/helm-charts/xos-services/progran/templates/configmap.yaml new file mode 100644 index 0000000..1e295d5 --- /dev/null +++ b/helm-charts/xos-services/progran/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: progran +data: + serviceConfig: | +{{ include "progran.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/progran/templates/deployment.yaml b/helm-charts/xos-services/progran/templates/deployment.yaml new file mode 100644 index 0000000..e8600cc --- /dev/null +++ b/helm-charts/xos-services/progran/templates/deployment.yaml @@ -0,0 +1,76 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "progran.fullname" . }} + labels: + app: {{ template "progran.name" . }} + chart: {{ template "progran.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "progran.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "progran.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: progran-config + mountPath: /opt/xos/synchronizers/progran/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: progran-config + configMap: + name: progran + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/progran/values.yaml b/helm-charts/xos-services/progran/values.yaml new file mode 100644 index 0000000..c300941 --- /dev/null +++ b/helm-charts/xos-services/progran/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for progran. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/progran-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/rcord/Chart.yaml b/helm-charts/xos-services/rcord/Chart.yaml new file mode 100644 index 0000000..431b568 --- /dev/null +++ b/helm-charts/xos-services/rcord/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: rcord +description: A Helm chart for XOS's "rcord" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.14 +appVersion: 1.1.0 diff --git a/helm-charts/xos-services/rcord/templates/_helpers.tpl b/helm-charts/xos-services/rcord/templates/_helpers.tpl new file mode 100644 index 0000000..2ce2d5f --- /dev/null +++ b/helm-charts/xos-services/rcord/templates/_helpers.tpl @@ -0,0 +1,73 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "rcord.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 "rcord.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "rcord.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "rcord.serviceConfig" -}} +name: rcord +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.rcord + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/rcord/templates/_tosca.tpl b/helm-charts/xos-services/rcord/templates/_tosca.tpl new file mode 100644 index 0000000..030d410 --- /dev/null +++ b/helm-charts/xos-services/rcord/templates/_tosca.tpl @@ -0,0 +1,29 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "rcord.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +imports: + - custom_types/rcordservice.yaml +description: R-CORD service TOSCA +topology_template: + node_templates: + service#rcord: + type: tosca.nodes.RCORDService + properties: + name: rcord + kind: data +{{- end -}} diff --git a/helm-charts/xos-services/rcord/templates/configmap.yaml b/helm-charts/xos-services/rcord/templates/configmap.yaml new file mode 100644 index 0000000..05b56dd --- /dev/null +++ b/helm-charts/xos-services/rcord/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: rcord +data: + serviceConfig: | +{{ include "rcord.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/rcord/templates/deployment.yaml b/helm-charts/xos-services/rcord/templates/deployment.yaml new file mode 100644 index 0000000..83b7720 --- /dev/null +++ b/helm-charts/xos-services/rcord/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "rcord.fullname" . }} + labels: + app: {{ template "rcord.name" . }} + chart: {{ template "rcord.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "rcord.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "rcord.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: rcord-config + mountPath: /opt/xos/synchronizers/rcord/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: rcord-config + configMap: + name: rcord + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/rcord/values.yaml b/helm-charts/xos-services/rcord/values.yaml new file mode 100644 index 0000000..491b031 --- /dev/null +++ b/helm-charts/xos-services/rcord/values.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for rcord +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/rcord-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: "" + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/sdncontroller/.helmignore b/helm-charts/xos-services/sdncontroller/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/sdncontroller/Chart.yaml b/helm-charts/xos-services/sdncontroller/Chart.yaml new file mode 100644 index 0000000..aa3c1a4 --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: sdncontroller +description: A Helm chart for XOS's "sdncontroller" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.2 +appVersion: 1.0.2 diff --git a/helm-charts/xos-services/sdncontroller/files/id_rsa b/helm-charts/xos-services/sdncontroller/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/sdncontroller/templates/_helpers.tpl b/helm-charts/xos-services/sdncontroller/templates/_helpers.tpl new file mode 100644 index 0000000..ed66475 --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "sdncontroller.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 "sdncontroller.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "sdncontroller.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "sdncontroller.serviceConfig" -}} +name: sdncontroller +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.sdncontroller + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/sdncontroller/templates/_tosca.tpl b/helm-charts/xos-services/sdncontroller/templates/_tosca.tpl new file mode 100644 index 0000000..c08aa56 --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/templates/_tosca.tpl @@ -0,0 +1,63 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "sdncontroller.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/sdncontrollerservice.yaml + - custom_types/sdncontrollervendor.yaml + - custom_types/image.yaml + - custom_types/flavor.yaml + +description: Configures the sdncontroller service + +topology_template: + node_templates: + + service#sdncontroller: + type: tosca.nodes.SDNControllerService + properties: + name: sdncontroller + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/sdncontroller/keys/id_rsa + + intel_sdncontroller: + type: tosca.nodes.SDNControllerVendor + properties: + name: intel_sdncontroller_{{ .vnfImageVersion }} + requirements: + - image: + node: image_sdncontroller + relationship: tosca.relationships.BelongsToOne + - flavor: + node: {{ .vnfImageFlavor }} + relationship: tosca.relationships.BelongsToOne + + # This is a placeholder image right now... + image_sdncontroller: + type: tosca.nodes.Image + properties: + name: image_sdncontroller_{{ .vnfImageVersion }} + disk_format: QCOW2 + container_format: BARE + path: {{ .vnfImageURL }} + + {{ .vnfImageFlavor }}: + type: tosca.nodes.Flavor + properties: + name: {{ .vnfImageFlavor }} +{{- end -}} diff --git a/helm-charts/xos-services/sdncontroller/templates/configmap.yaml b/helm-charts/xos-services/sdncontroller/templates/configmap.yaml new file mode 100644 index 0000000..8fa526f --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: sdncontroller +data: + serviceConfig: | +{{ include "sdncontroller.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/sdncontroller/templates/deployment.yaml b/helm-charts/xos-services/sdncontroller/templates/deployment.yaml new file mode 100644 index 0000000..2c886f2 --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/templates/deployment.yaml @@ -0,0 +1,90 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "sdncontroller.fullname" . }} + labels: + app: {{ template "sdncontroller.name" . }} + chart: {{ template "sdncontroller.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "sdncontroller.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "sdncontroller.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: sdncontroller-config + mountPath: /opt/xos/synchronizers/sdncontroller/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: sdncontroller-keys + mountPath: /opt/xos/services/sdncontroller/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: sdncontroller-config + configMap: + name: sdncontroller + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: sdncontroller-keys + secret: + secretName: sdncontroller-keys + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/sdncontroller/templates/secret.yaml b/helm-charts/xos-services/sdncontroller/templates/secret.yaml new file mode 100644 index 0000000..16af8b4 --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: sdncontroller-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/sdncontroller/values.yaml b/helm-charts/xos-services/sdncontroller/values.yaml new file mode 100644 index 0000000..a9230ef --- /dev/null +++ b/helm-charts/xos-services/sdncontroller/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for sdncontroller. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/sdncontroller-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +vnfImageURL: https://github.com/opencord/platform-install/releases/download/vms/trusty-server-cloudimg-amd64-disk1.img.20170201 +vnfImageVersion: "v0.1" +vnfImageFlavor: "m1.small" + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/simpleexampleservice/Chart.yaml b/helm-charts/xos-services/simpleexampleservice/Chart.yaml new file mode 100644 index 0000000..49e0c58 --- /dev/null +++ b/helm-charts/xos-services/simpleexampleservice/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: simpleexampleservice +description: A Helm chart for XOS's "simpleexampleservice" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.2.0 +appVersion: 1.2.1 diff --git a/helm-charts/xos-services/simpleexampleservice/templates/_helpers.tpl b/helm-charts/xos-services/simpleexampleservice/templates/_helpers.tpl new file mode 100644 index 0000000..db0137f --- /dev/null +++ b/helm-charts/xos-services/simpleexampleservice/templates/_helpers.tpl @@ -0,0 +1,81 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "simpleexampleservice.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 "simpleexampleservice.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "simpleexampleservice.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "simpleexampleservice.serviceConfig" -}} +name: simpleexampleservice +desired_state: {{ .Values.desired_state | quote }} +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.simpleexampleservice + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/simpleexampleservice/templates/_tosca.tpl b/helm-charts/xos-services/simpleexampleservice/templates/_tosca.tpl new file mode 100644 index 0000000..a71153e --- /dev/null +++ b/helm-charts/xos-services/simpleexampleservice/templates/_tosca.tpl @@ -0,0 +1,71 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "simpleexampleservice.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/image.yaml + - custom_types/site.yaml + - custom_types/simpleexampleservice.yaml + - custom_types/slice.yaml + - custom_types/trustdomain.yaml + +description: Configures the simple example service + +topology_template: + node_templates: + + default_trustdomain: + type: tosca.nodes.TrustDomain + properties: + name: "default" + must-exist: true + + httpd_image: + type: tosca.nodes.Image + properties: + name: "httpd" + tag: "2.4" + + service#simpleexampleservice: + type: tosca.nodes.SimpleExampleService + properties: + name: simpleexampleservice + service_message: hello + mysite: + type: tosca.nodes.Site + properties: + name: "mysite" + must-exist: true + simpleexampleservice_slice: + type: tosca.nodes.Slice + properties: + name: "mysite_simpleexampleservice" + requirements: + - site: + node: mysite + relationship: tosca.relationships.BelongsToOne + - trust_domain: + node: default_trustdomain + relationship: tosca.relationships.BelongsToOne + - default_image: + node: httpd_image + relationship: tosca.relationships.BelongsToOne + - service: + node: service#simpleexampleservice + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/xos-services/simpleexampleservice/templates/configmap.yaml b/helm-charts/xos-services/simpleexampleservice/templates/configmap.yaml new file mode 100644 index 0000000..ef13d3e --- /dev/null +++ b/helm-charts/xos-services/simpleexampleservice/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: simpleexampleservice +data: + serviceConfig: | +{{ include "simpleexampleservice.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/simpleexampleservice/templates/deployment.yaml b/helm-charts/xos-services/simpleexampleservice/templates/deployment.yaml new file mode 100644 index 0000000..976e54b --- /dev/null +++ b/helm-charts/xos-services/simpleexampleservice/templates/deployment.yaml @@ -0,0 +1,74 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "simpleexampleservice.fullname" . }} + labels: + app: {{ template "simpleexampleservice.name" . }} + chart: {{ template "simpleexampleservice.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "simpleexampleservice.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "simpleexampleservice.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: simpleexampleservice-config + mountPath: /opt/xos/synchronizers/simpleexampleservice/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: simpleexampleservice-config + configMap: + name: simpleexampleservice + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/simpleexampleservice/values.yaml b/helm-charts/xos-services/simpleexampleservice/values.yaml new file mode 100644 index 0000000..101cca3 --- /dev/null +++ b/helm-charts/xos-services/simpleexampleservice/values.yaml @@ -0,0 +1,46 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for simpleexampleservice. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/simpleexampleservice-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +desired_state: load + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/tt-workflow-driver/.helmignore b/helm-charts/xos-services/tt-workflow-driver/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/tt-workflow-driver/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/tt-workflow-driver/Chart.yaml b/helm-charts/xos-services/tt-workflow-driver/Chart.yaml new file mode 100644 index 0000000..2b98026 --- /dev/null +++ b/helm-charts/xos-services/tt-workflow-driver/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: tt-workflow-driver +description: A Helm chart for XOS's "tt-workflow-driver" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 0.1.0 +appVersion: 0.1.0 diff --git a/helm-charts/xos-services/tt-workflow-driver/templates/_helpers.tpl b/helm-charts/xos-services/tt-workflow-driver/templates/_helpers.tpl new file mode 100644 index 0000000..344fc5c --- /dev/null +++ b/helm-charts/xos-services/tt-workflow-driver/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "tt-workflow-driver.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 "tt-workflow-driver.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "tt-workflow-driver.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "tt-workflow-driver.serviceConfig" -}} +name: tt-workflow-driver +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.tt-workflow-driver + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/tt-workflow-driver/templates/_tosca.tpl b/helm-charts/xos-services/tt-workflow-driver/templates/_tosca.tpl new file mode 100644 index 0000000..1b3588d --- /dev/null +++ b/helm-charts/xos-services/tt-workflow-driver/templates/_tosca.tpl @@ -0,0 +1,30 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "tt-workflow-driver.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up tt-workflow-driver service +imports: + - custom_types/ttworkflowdriverservice.yaml + +topology_template: + node_templates: + service#tt-workflow-driver: + type: tosca.nodes.TtWorkflowDriverService + properties: + name: tt-workflow-driver + kind: oss +{{- end -}} diff --git a/helm-charts/xos-services/tt-workflow-driver/templates/configmap.yaml b/helm-charts/xos-services/tt-workflow-driver/templates/configmap.yaml new file mode 100644 index 0000000..0035330 --- /dev/null +++ b/helm-charts/xos-services/tt-workflow-driver/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: tt-workflow-driver +data: + serviceConfig: | +{{ include "tt-workflow-driver.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/tt-workflow-driver/templates/deployment.yaml b/helm-charts/xos-services/tt-workflow-driver/templates/deployment.yaml new file mode 100644 index 0000000..1cdea92 --- /dev/null +++ b/helm-charts/xos-services/tt-workflow-driver/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "tt-workflow-driver.fullname" . }} + labels: + app: {{ template "tt-workflow-driver.name" . }} + chart: {{ template "tt-workflow-driver.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "tt-workflow-driver.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "tt-workflow-driver.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: tt-workflow-driver-config + mountPath: /opt/xos/synchronizers/tt-workflow-driver/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: tt-workflow-driver-config + configMap: + name: tt-workflow-driver + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/tt-workflow-driver/values.yaml b/helm-charts/xos-services/tt-workflow-driver/values.yaml new file mode 100644 index 0000000..c8c1b83 --- /dev/null +++ b/helm-charts/xos-services/tt-workflow-driver/values.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for the tt-workflow-driver service +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/tt-workflow-driver-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/vhss/.helmignore b/helm-charts/xos-services/vhss/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/vhss/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/vhss/Chart.yaml b/helm-charts/xos-services/vhss/Chart.yaml new file mode 100644 index 0000000..470473c --- /dev/null +++ b/helm-charts/xos-services/vhss/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: vhss +description: A Helm chart for XOS's "vhss" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.3 +appVersion: 1.0.3 + diff --git a/helm-charts/xos-services/vhss/files/id_rsa b/helm-charts/xos-services/vhss/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/vhss/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/vhss/templates/_helpers.tpl b/helm-charts/xos-services/vhss/templates/_helpers.tpl new file mode 100644 index 0000000..6d8d47a --- /dev/null +++ b/helm-charts/xos-services/vhss/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vhss.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 "vhss.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vhss.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vhss.serviceConfig" -}} +name: vhss +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.vhss + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/vhss/templates/_tosca.tpl b/helm-charts/xos-services/vhss/templates/_tosca.tpl new file mode 100644 index 0000000..547ab9c --- /dev/null +++ b/helm-charts/xos-services/vhss/templates/_tosca.tpl @@ -0,0 +1,62 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vhss.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/vhssservice.yaml + - custom_types/vhssvendor.yaml + - custom_types/flavor.yaml + - custom_types/image.yaml + +description: Configures the vHSS service + +topology_template: + node_templates: + + service#vhss: + type: tosca.nodes.VHSSService + properties: + name: vhss + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/vhss/keys/id_rsa + + sprint_hss: + type: tosca.nodes.VHSSVendor + properties: + name: sprint_hss_{{ .vnfImageVersion }} + requirements: + - image: + node: image_hss + relationship: tosca.relationships.BelongsToOne + - flavor: + node: {{ .vnfImageFlavor }} + relationship: tosca.relationships.BelongsToOne + + image_hss: + type: tosca.nodes.Image + properties: + name: image_hss_{{ .vnfImageVersion }} + disk_format: QCOW2 + container_format: BARE + path: {{ .vnfImageURL }} + + {{ .vnfImageFlavor }}: + type: tosca.nodes.Flavor + properties: + name: {{ .vnfImageFlavor }} +{{- end -}} diff --git a/helm-charts/xos-services/vhss/templates/configmap.yaml b/helm-charts/xos-services/vhss/templates/configmap.yaml new file mode 100644 index 0000000..44d6396 --- /dev/null +++ b/helm-charts/xos-services/vhss/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vhss +data: + serviceConfig: | +{{ include "vhss.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/vhss/templates/deployment.yaml b/helm-charts/xos-services/vhss/templates/deployment.yaml new file mode 100644 index 0000000..81fd874 --- /dev/null +++ b/helm-charts/xos-services/vhss/templates/deployment.yaml @@ -0,0 +1,90 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vhss.fullname" . }} + labels: + app: {{ template "vhss.name" . }} + chart: {{ template "vhss.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vhss.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vhss.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vhss-config + mountPath: /opt/xos/synchronizers/vhss/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: vhss-keys + mountPath: /opt/xos/services/vhss/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: vhss-config + configMap: + name: vhss + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: vhss-keys + secret: + secretName: vhss-keys + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/vhss/templates/secret.yaml b/helm-charts/xos-services/vhss/templates/secret.yaml new file mode 100644 index 0000000..fc74bb3 --- /dev/null +++ b/helm-charts/xos-services/vhss/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: vhss-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/vhss/values.yaml b/helm-charts/xos-services/vhss/values.yaml new file mode 100644 index 0000000..21a18e4 --- /dev/null +++ b/helm-charts/xos-services/vhss/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vhss. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/vhss-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +vnfImageURL: "https://github.com/opencord/vHSS/releases/download/vms/image-hss.qcow2.v0.1.1" +vnfImageVersion: "v0.1.1" +vnfImageFlavor: "m1.large" + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/vmme/.helmignore b/helm-charts/xos-services/vmme/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/vmme/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/vmme/Chart.yaml b/helm-charts/xos-services/vmme/Chart.yaml new file mode 100644 index 0000000..b5746e0 --- /dev/null +++ b/helm-charts/xos-services/vmme/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: vmme +description: A Helm chart for XOS's "vmme" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.3 +appVersion: 1.0.3 + diff --git a/helm-charts/xos-services/vmme/files/id_rsa b/helm-charts/xos-services/vmme/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/vmme/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/vmme/templates/_helpers.tpl b/helm-charts/xos-services/vmme/templates/_helpers.tpl new file mode 100644 index 0000000..75e9931 --- /dev/null +++ b/helm-charts/xos-services/vmme/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vmme.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 "vmme.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vmme.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vmme.serviceConfig" -}} +name: vmme +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.vmme + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/vmme/templates/_tosca.tpl b/helm-charts/xos-services/vmme/templates/_tosca.tpl new file mode 100644 index 0000000..0b644fc --- /dev/null +++ b/helm-charts/xos-services/vmme/templates/_tosca.tpl @@ -0,0 +1,62 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vmme.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/vmmeservice.yaml + - custom_types/vmmevendor.yaml + - custom_types/flavor.yaml + - custom_types/image.yaml + +description: Configures the vMME service + +topology_template: + node_templates: + + service#vmme: + type: tosca.nodes.VMMEService + properties: + name: vmme + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/vmme/keys/id_rsa + + sprint_mme: + type: tosca.nodes.VMMEVendor + properties: + name: sprint_mme_{{ .vnfImageVersion }} + requirements: + - image: + node: image_mme + relationship: tosca.relationships.BelongsToOne + - flavor: + node: {{ .vnfImageFlavor }} + relationship: tosca.relationships.BelongsToOne + + image_mme: + type: tosca.nodes.Image + properties: + name: image_mme_{{ .vnfImageVersion }} + disk_format: QCOW2 + container_format: BARE + path: {{ .vnfImageURL }} + + {{ .vnfImageFlavor }}: + type: tosca.nodes.Flavor + properties: + name: {{ .vnfImageFlavor }} +{{- end -}} diff --git a/helm-charts/xos-services/vmme/templates/configmap.yaml b/helm-charts/xos-services/vmme/templates/configmap.yaml new file mode 100644 index 0000000..0ce0a56 --- /dev/null +++ b/helm-charts/xos-services/vmme/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmme +data: + serviceConfig: | +{{ include "vmme.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/vmme/templates/deployment.yaml b/helm-charts/xos-services/vmme/templates/deployment.yaml new file mode 100644 index 0000000..e609c52 --- /dev/null +++ b/helm-charts/xos-services/vmme/templates/deployment.yaml @@ -0,0 +1,90 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vmme.fullname" . }} + labels: + app: {{ template "vmme.name" . }} + chart: {{ template "vmme.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vmme.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vmme.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vmme-config + mountPath: /opt/xos/synchronizers/vmme/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: vmme-keys + mountPath: /opt/xos/services/vmme/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: vmme-config + configMap: + name: vmme + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: vmme-keys + secret: + secretName: vmme-keys + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/vmme/templates/secret.yaml b/helm-charts/xos-services/vmme/templates/secret.yaml new file mode 100644 index 0000000..aae354c --- /dev/null +++ b/helm-charts/xos-services/vmme/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: vmme-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/vmme/values.yaml b/helm-charts/xos-services/vmme/values.yaml new file mode 100644 index 0000000..2fc8801 --- /dev/null +++ b/helm-charts/xos-services/vmme/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vmme. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/vmme-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +vnfImageURL: "https://github.com/opencord/vMME/releases/download/vms/image-mme.qcow2.v0.1.1" +vnfImageVersion: "v0.1.1" +vnfImageFlavor: "m1.large" + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/volt/.helmignore b/helm-charts/xos-services/volt/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/volt/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/volt/Chart.yaml b/helm-charts/xos-services/volt/Chart.yaml new file mode 100644 index 0000000..d78909c --- /dev/null +++ b/helm-charts/xos-services/volt/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: volt +description: A Helm chart for XOS's "olt-service" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.2.0 +appVersion: 2.2.1 diff --git a/helm-charts/xos-services/volt/templates/_helpers.tpl b/helm-charts/xos-services/volt/templates/_helpers.tpl new file mode 100644 index 0000000..68aad4c --- /dev/null +++ b/helm-charts/xos-services/volt/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "volt.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 "volt.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "volt.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "volt.serviceConfig" -}} +name: volt +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: {{ .Values.xosCoreService | quote }} +event_bus: + endpoint: {{ .Values.kafkaService | quote }} + kind: kafka +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "{{ .Values.kafkaService }}:9092" + topic: xos.log.volt + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/volt/templates/_tosca.tpl b/helm-charts/xos-services/volt/templates/_tosca.tpl new file mode 100644 index 0000000..9666e06 --- /dev/null +++ b/helm-charts/xos-services/volt/templates/_tosca.tpl @@ -0,0 +1,36 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "volt.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up VOLT service +imports: + - custom_types/voltservice.yaml + +topology_template: + node_templates: + service#volt: + type: tosca.nodes.VOLTService + properties: + name: volt + kind: data + voltha_url: {{ .volthaRestService | quote }} + voltha_port: 8882 + onos_voltha_url: {{ .onosRestService | quote }} + onos_voltha_port: 8181 + onos_voltha_user: karaf + onos_voltha_pass: karaf +{{- end -}} diff --git a/helm-charts/xos-services/volt/templates/configmap.yaml b/helm-charts/xos-services/volt/templates/configmap.yaml new file mode 100644 index 0000000..37dbd8d --- /dev/null +++ b/helm-charts/xos-services/volt/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: volt +data: + serviceConfig: | +{{ include "volt.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/volt/templates/deployment.yaml b/helm-charts/xos-services/volt/templates/deployment.yaml new file mode 100644 index 0000000..dee6e15 --- /dev/null +++ b/helm-charts/xos-services/volt/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "volt.fullname" . }} + labels: + app: {{ template "volt.name" . }} + chart: {{ template "volt.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "volt.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "volt.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: volt-config + mountPath: /opt/xos/synchronizers/volt/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: volt-config + configMap: + name: volt + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/volt/values.yaml b/helm-charts/xos-services/volt/values.yaml new file mode 100644 index 0000000..c91144c --- /dev/null +++ b/helm-charts/xos-services/volt/values.yaml @@ -0,0 +1,47 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vOLT +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/volt-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" +xosCoreService: "xos-core:50051" + +volthaRestService: "voltha.voltha.svc.cluster.local" +onosRestService: "onos-ui.default.svc.cluster.local" +kafkaService: "cord-kafka" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/vrouter/.helmignore b/helm-charts/xos-services/vrouter/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/vrouter/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/vrouter/Chart.yaml b/helm-charts/xos-services/vrouter/Chart.yaml new file mode 100644 index 0000000..cf4eb0e --- /dev/null +++ b/helm-charts/xos-services/vrouter/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: vrouter +description: A Helm chart for XOS's "vRouter" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 2.1.0 +appVersion: 2.1.0 diff --git a/helm-charts/xos-services/vrouter/templates/_helpers.tpl b/helm-charts/xos-services/vrouter/templates/_helpers.tpl new file mode 100644 index 0000000..ae5e80b --- /dev/null +++ b/helm-charts/xos-services/vrouter/templates/_helpers.tpl @@ -0,0 +1,77 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vrouter.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 "vrouter.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vrouter.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vrouter.serviceConfig" -}} +name: vrouter +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.vrouter + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/vrouter/templates/_tosca.tpl b/helm-charts/xos-services/vrouter/templates/_tosca.tpl new file mode 100644 index 0000000..e70c33d --- /dev/null +++ b/helm-charts/xos-services/vrouter/templates/_tosca.tpl @@ -0,0 +1,30 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vrouter.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up VRouter service +imports: + - custom_types/vrouterservice.yaml + +topology_template: + node_templates: + service#vrouter: + type: tosca.nodes.VRouterService + properties: + name: vrouter + kind: data +{{- end -}} diff --git a/helm-charts/xos-services/vrouter/templates/configmap.yaml b/helm-charts/xos-services/vrouter/templates/configmap.yaml new file mode 100644 index 0000000..82606b7 --- /dev/null +++ b/helm-charts/xos-services/vrouter/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vrouter +data: + serviceConfig: | +{{ include "vrouter.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/vrouter/templates/deployment.yaml b/helm-charts/xos-services/vrouter/templates/deployment.yaml new file mode 100644 index 0000000..9cfcc8d --- /dev/null +++ b/helm-charts/xos-services/vrouter/templates/deployment.yaml @@ -0,0 +1,77 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vrouter.fullname" . }} + labels: + app: {{ template "vrouter.name" . }} + chart: {{ template "vrouter.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vrouter.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vrouter.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vrouter-config + mountPath: /opt/xos/synchronizers/vrouter/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: vrouter-config + configMap: + name: vrouter + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/vrouter/values.yaml b/helm-charts/xos-services/vrouter/values.yaml new file mode 100644 index 0000000..0bfd1cf --- /dev/null +++ b/helm-charts/xos-services/vrouter/values.yaml @@ -0,0 +1,43 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for addressmanager. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + + +image: + repository: 'xosproject/vrouter-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/vsg-hw/Chart.yaml b/helm-charts/xos-services/vsg-hw/Chart.yaml new file mode 100644 index 0000000..812d4c1 --- /dev/null +++ b/helm-charts/xos-services/vsg-hw/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: vsg-hw +description: A Helm chart for XOS's "vsg-hw" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.1.0 +appVersion: 1.1.0 diff --git a/helm-charts/xos-services/vsg-hw/templates/_helpers.tpl b/helm-charts/xos-services/vsg-hw/templates/_helpers.tpl new file mode 100644 index 0000000..3f0a5ea --- /dev/null +++ b/helm-charts/xos-services/vsg-hw/templates/_helpers.tpl @@ -0,0 +1,77 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vsg-hw.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 "vsg-hw.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vsg-hw.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vsg-hw.serviceConfig" -}} +name: vsg-hw +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.vsg-hw + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/vsg-hw/templates/_tosca.tpl b/helm-charts/xos-services/vsg-hw/templates/_tosca.tpl new file mode 100644 index 0000000..14975f8 --- /dev/null +++ b/helm-charts/xos-services/vsg-hw/templates/_tosca.tpl @@ -0,0 +1,30 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vsg-hw.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 +description: Set up VSG-HW service +imports: + - custom_types/vsghwservice.yaml + +topology_template: + node_templates: + service#vsg-hw: + type: tosca.nodes.VSGHWService + properties: + name: vsg-hw + kind: data +{{- end -}} diff --git a/helm-charts/xos-services/vsg-hw/templates/configmap.yaml b/helm-charts/xos-services/vsg-hw/templates/configmap.yaml new file mode 100644 index 0000000..6a109c8 --- /dev/null +++ b/helm-charts/xos-services/vsg-hw/templates/configmap.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vsg-hw +data: + serviceConfig: | +{{ include "vsg-hw.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/vsg-hw/templates/deployment.yaml b/helm-charts/xos-services/vsg-hw/templates/deployment.yaml new file mode 100644 index 0000000..696ba93 --- /dev/null +++ b/helm-charts/xos-services/vsg-hw/templates/deployment.yaml @@ -0,0 +1,76 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vsg-hw.fullname" . }} + labels: + app: {{ template "vsg-hw.name" . }} + chart: {{ template "vsg-hw.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vsg-hw.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vsg-hw.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vsg-hw-config + mountPath: /opt/xos/synchronizers/vsg-hw/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: vsg-hw-config + configMap: + name: vsg-hw + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/vsg-hw/values.yaml b/helm-charts/xos-services/vsg-hw/values.yaml new file mode 100644 index 0000000..5fe50a1 --- /dev/null +++ b/helm-charts/xos-services/vsg-hw/values.yaml @@ -0,0 +1,42 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vsg-hw +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/vsg-hw-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/vspgwc/.helmignore b/helm-charts/xos-services/vspgwc/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/vspgwc/Chart.yaml b/helm-charts/xos-services/vspgwc/Chart.yaml new file mode 100644 index 0000000..c2cd4d4 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: vspgwc +description: A Helm chart for XOS's "vspgwc" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.2 +appVersion: 1.0.2 diff --git a/helm-charts/xos-services/vspgwc/files/id_rsa b/helm-charts/xos-services/vspgwc/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/vspgwc/templates/_helpers.tpl b/helm-charts/xos-services/vspgwc/templates/_helpers.tpl new file mode 100644 index 0000000..2649c11 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/templates/_helpers.tpl @@ -0,0 +1,80 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vspgwc.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 "vspgwc.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vspgwc.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vspgwc.serviceConfig" -}} +name: vspgwc +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.vspgwc + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/vspgwc/templates/_tosca.tpl b/helm-charts/xos-services/vspgwc/templates/_tosca.tpl new file mode 100644 index 0000000..84cfaf7 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/templates/_tosca.tpl @@ -0,0 +1,62 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vspgwc.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/vspgwcservice.yaml + - custom_types/vspgwcvendor.yaml + - custom_types/flavor.yaml + - custom_types/image.yaml + +description: Configures the vSPGWC service + +topology_template: + node_templates: + + service#vspgwc: + type: tosca.nodes.VSPGWCService + properties: + name: vspgwc + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/vspgwc/keys/id_rsa + + intel_vspgwc: + type: tosca.nodes.VSPGWCVendor + properties: + name: intel_vspgwc_{{ .vnfImageVersion }} + requirements: + - image: + node: image_spgwc + relationship: tosca.relationships.BelongsToOne + - flavor: + node: {{ .vnfImageFlavor }} + relationship: tosca.relationships.BelongsToOne + + image_spgwc: + type: tosca.nodes.Image + properties: + name: image_spgwc_{{ .vnfImageVersion }} + disk_format: QCOW2 + container_format: BARE + path: {{ .vnfImageURL }} + + {{ .vnfImageFlavor }}: + type: tosca.nodes.Flavor + properties: + name: {{ .vnfImageFlavor }} +{{- end -}} diff --git a/helm-charts/xos-services/vspgwc/templates/configmap.yaml b/helm-charts/xos-services/vspgwc/templates/configmap.yaml new file mode 100644 index 0000000..911e598 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vspgwc +data: + serviceConfig: | +{{ include "vspgwc.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/vspgwc/templates/deployment.yaml b/helm-charts/xos-services/vspgwc/templates/deployment.yaml new file mode 100644 index 0000000..76a517d --- /dev/null +++ b/helm-charts/xos-services/vspgwc/templates/deployment.yaml @@ -0,0 +1,90 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vspgwc.fullname" . }} + labels: + app: {{ template "vspgwc.name" . }} + chart: {{ template "vspgwc.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vspgwc.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vspgwc.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vspgwc-config + mountPath: /opt/xos/synchronizers/vspgwc/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: vspgwc-keys + mountPath: /opt/xos/services/vspgwc/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: vspgwc-config + configMap: + name: vspgwc + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: vspgwc-keys + secret: + secretName: vspgwc-keys + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/vspgwc/templates/secret.yaml b/helm-charts/xos-services/vspgwc/templates/secret.yaml new file mode 100644 index 0000000..18a6093 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: vspgwc-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/vspgwc/values.yaml b/helm-charts/xos-services/vspgwc/values.yaml new file mode 100644 index 0000000..8fca902 --- /dev/null +++ b/helm-charts/xos-services/vspgwc/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vspgwc. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/vspgwc-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +vnfImageURL: "https://github.com/opencord/vspgwc/releases/download/vms/image-spgwc.qcow2.v0.1.1" +vnfImageVersion: "v0.1.1" +vnfImageFlavor: "m1.large" + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/vspgwu/.helmignore b/helm-charts/xos-services/vspgwu/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/vspgwu/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/vspgwu/Chart.yaml b/helm-charts/xos-services/vspgwu/Chart.yaml new file mode 100644 index 0000000..288fbfa --- /dev/null +++ b/helm-charts/xos-services/vspgwu/Chart.yaml @@ -0,0 +1,21 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: vspgwu +description: A Helm chart for XOS's "vspgwu" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.2 +appVersion: 1.0.2 diff --git a/helm-charts/xos-services/vspgwu/files/id_rsa b/helm-charts/xos-services/vspgwu/files/id_rsa new file mode 100644 index 0000000..c840002 --- /dev/null +++ b/helm-charts/xos-services/vspgwu/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAy+S+bw7ENW5knorMTH/xmRKr/OaBx7ukRRNe1WKEwLgQbB0J +xEznHG0E/OakgcuTQDACArTndeYl2H5rpdHhXkh6EK9R9yAF09In+gDcVzpvP2dq +5UTbYThILIw0FPX6DcUOMJLMoMuXqSpmxITKmxWY7o+M2H0rT8xP4JBUhPUI4SjF +miZsixX6vX/A5wvk0xONSuYhm7a2pq+6h0lrCisu+V1ejGWSyxRMa0KpWA5SwNld +GmHswqpd3wfeiiZn+hiUU9492O6Fmo+4BMzAsnANkID/GTRS/9kNaoL0EXOiOOvx +1IjodyE/C1Q3aNmVJ/aqzWpnkNc0e2vsAb2CFQIDAQABAoIBAQDGRZByCtf+ZXVv +PuXgVmKoSiH5cmYtxmi9y1JjCsSxa8x8ddhzjZ0IZXN+QwMiPMbamlS6MRUL71xK +JNWlkG0p9CzPYM3CFN/V1f2N/ZxHLsnTzEuE2+rBpat5tnVHFNOu5DsiPP7ENncq +x9Lbs44aNWxcQDfkpgOiO7pJU9D84FYuJbH6EhHCt1nuyUeHaG7qqsDYnaGo6NSc +qqnmrvoSBOQ+CIXgqRwGuetN9kNF/nKOWxWiZ+VAYIXb7cnkmOWTg5ojPifCWMeE +xiV9agFzEEJhPxhivFtIq0XvsiSlAZvZcREXKayw6zFx9JTgpOXYln+xg0pQEVXr +MLWv7BTZAoGBAPLy1Z7qjeR9PwTZen970AS3BsATQAcAh4aEHGPxwLmWDkhzJTW7 +C2U4dSyjB1W6OL6y4u7aggO5nshsEUZ73hE37b1/sr1PYC+NXuXuThDYDFD3f5LA +HwU0Xvx+uibV75+XpOkClSBkf2k6eBFD68PaLyjfCSnEkzukWPtngxRTAoGBANbY +zXFKIrcQtAz2p3+txU9Xqa5xK2rQfLurc66xxxC3KO8oMhYP2htieYRygwg91JR2 +Bu6sX8+t5MNYSso1t8CSO36tcgUDowo+2XuvY9FwQUgViHNKOb7cFrNSgWMVhbng +/ZgxKrnVl1NPBivDV5kPg+jD1BIOUlQimyrD6sL3AoGBAOnnRCZpWs1GjHrly5ub +n846TMR2hCl5qAGphg/vfIbxYrT8LzII8FK2xZGBMJmn3eQ0JGqkc5KUjrwV15gN +v+LB/yF4JaVAG7IMoPYstnpfF5SIhQnL8NG4906P0Dd9t+PmQz6XXu4987FjOqAc +zYvVr5vhCFhvSvWcKJN7uGbDAoGBAKvJequlLZDXCEB9UHzkwymn3IMg9ihYQAQH +GV6Lw7H34gEoULQXRLw0xxlCPsduOPXkUbKxnYJ/drVDebmprh2KT4wAv3SG7eyZ +SGh/Wv7yFSDAJvSYWwfjDzufMtm5Mc3oupzgY1toD7GLNFH1xasbHswVGRK+5NFl +QlC1ipcNAoGBAIxqGyCai6btwDlbpkdI+ck2j7k9ndZ8sosc0G2se9d58sfsHdWe +1wpqe62t7mQZr+IgEyq7RuuEtRR6Xqb8RQqAuEdSms1zcWc30SJJhPiwxIeLL0dx +ly/HBBqnozD4BN3ENiqnIhOgeZE7XHaS43luYkYpBOuBaWYs5IIZWcct +-----END RSA PRIVATE KEY----- diff --git a/helm-charts/xos-services/vspgwu/templates/_helpers.tpl b/helm-charts/xos-services/vspgwu/templates/_helpers.tpl new file mode 100644 index 0000000..feecce1 --- /dev/null +++ b/helm-charts/xos-services/vspgwu/templates/_helpers.tpl @@ -0,0 +1,103 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vspgwu.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 "vspgwu.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vspgwu.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vspgwu.serviceConfig" -}} +name: vspgwu +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.vspgwu + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +blueprints: + - name: cord_5_0_blueprint + graph: + - name: VMMETenant + - name: VSPGWCTenant + links: + - name: VMMETenant + - name: VSPGWUTenant + - name: VSPGWUTenant + - name: VHSSTenant + links: + - name: HSSDBServiceInstance + - name: HSSDBServiceInstance + - name: cord_4_1_blueprint + graph: + - name: VSPGWUTenant + links: + - name: VENBServiceInstance + - name: VENBServiceInstance + - name: VSPGWCTenant + links: + - name: VENBServiceInstance + - name: VSPGWUTenant +proxy_ssh: + enabled: {{ .Values.global.proxySshEnabled }} + user: {{ .Values.global.proxySshUser }} +{{- end -}} diff --git a/helm-charts/xos-services/vspgwu/templates/_tosca.tpl b/helm-charts/xos-services/vspgwu/templates/_tosca.tpl new file mode 100644 index 0000000..fea233a --- /dev/null +++ b/helm-charts/xos-services/vspgwu/templates/_tosca.tpl @@ -0,0 +1,62 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vspgwu.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/vspgwuservice.yaml + - custom_types/vspgwuvendor.yaml + - custom_types/flavor.yaml + - custom_types/image.yaml + +description: Configures the vSPGWU service + +topology_template: + node_templates: + + service#vspgwu: + type: tosca.nodes.VSPGWUService + properties: + name: vspgwu + public_key: {{ .publicKey | quote }} + private_key_fn: /opt/xos/services/vspgwu/keys/id_rsa + + intel_vspgwu: + type: tosca.nodes.VSPGWUVendor + properties: + name: intel_vspgwu_{{ .vnfImageVersion }} + requirements: + - image: + node: image_spgwu + relationship: tosca.relationships.BelongsToOne + - flavor: + node: {{ .vnfImageFlavor }} + relationship: tosca.relationships.BelongsToOne + + image_spgwu: + type: tosca.nodes.Image + properties: + name: image_spgwu_{{ .vnfImageVersion }} + disk_format: QCOW2 + container_format: BARE + path: {{ .vnfImageURL }} + + {{ .vnfImageFlavor }}: + type: tosca.nodes.Flavor + properties: + name: {{ .vnfImageFlavor }} +{{- end -}} diff --git a/helm-charts/xos-services/vspgwu/templates/configmap.yaml b/helm-charts/xos-services/vspgwu/templates/configmap.yaml new file mode 100644 index 0000000..12f1ce2 --- /dev/null +++ b/helm-charts/xos-services/vspgwu/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vspgwu +data: + serviceConfig: | +{{ include "vspgwu.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/vspgwu/templates/deployment.yaml b/helm-charts/xos-services/vspgwu/templates/deployment.yaml new file mode 100644 index 0000000..a6d3bdc --- /dev/null +++ b/helm-charts/xos-services/vspgwu/templates/deployment.yaml @@ -0,0 +1,90 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vspgwu.fullname" . }} + labels: + app: {{ template "vspgwu.name" . }} + chart: {{ template "vspgwu.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vspgwu.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vspgwu.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vspgwu-config + mountPath: /opt/xos/synchronizers/vspgwu/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: vspgwu-keys + mountPath: /opt/xos/services/vspgwu/keys + readOnly: true + - name: node-key + mountPath: /opt/cord_profile + readOnly: true + volumes: + - name: vspgwu-config + configMap: + name: vspgwu + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: vspgwu-keys + secret: + secretName: vspgwu-keys + - name: node-key + secret: + secretName: node-key + defaultMode: 256 + optional: true + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/vspgwu/templates/secret.yaml b/helm-charts/xos-services/vspgwu/templates/secret.yaml new file mode 100644 index 0000000..961f28f --- /dev/null +++ b/helm-charts/xos-services/vspgwu/templates/secret.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: Secret +metadata: + name: vspgwu-keys + namespace: default +type: Opaque +data: + id_rsa: {{ .Files.Get .Values.privateKeyFile | b64enc }} \ No newline at end of file diff --git a/helm-charts/xos-services/vspgwu/values.yaml b/helm-charts/xos-services/vspgwu/values.yaml new file mode 100644 index 0000000..9a41837 --- /dev/null +++ b/helm-charts/xos-services/vspgwu/values.yaml @@ -0,0 +1,52 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for vspgwu. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/vspgwu-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +vnfImageURL: "https://github.com/opencord/vspgwu/releases/download/vms/image-spgwu.qcow2.v0.1.1" +vnfImageVersion: "v0.1.1" +vnfImageFlavor: "m1.xlarge" + +publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL5L5vDsQ1bmSeisxMf/GZEqv85oHHu6RFE17VYoTAuBBsHQnETOccbQT85qSBy5NAMAICtOd15iXYfmul0eFeSHoQr1H3IAXT0if6ANxXOm8/Z2rlRNthOEgsjDQU9foNxQ4wksygy5epKmbEhMqbFZjuj4zYfStPzE/gkFSE9QjhKMWaJmyLFfq9f8DnC+TTE41K5iGbtramr7qHSWsKKy75XV6MZZLLFExrQqlYDlLA2V0aYezCql3fB96KJmf6GJRT3j3Y7oWaj7gEzMCycA2QgP8ZNFL/2Q1qgvQRc6I46/HUiOh3IT8LVDdo2ZUn9qrNameQ1zR7a+wBvYIV Insecure M-CORD keypair" +privateKeyFile: "files/id_rsa" + +# These variables can be overridden by the profile chart +global: + proxySshEnabled: true + proxySshUser: "root" + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-services/vtn-service/.helmignore b/helm-charts/xos-services/vtn-service/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/helm-charts/xos-services/vtn-service/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm-charts/xos-services/vtn-service/Chart.yaml b/helm-charts/xos-services/vtn-service/Chart.yaml new file mode 100644 index 0000000..caf2ae5 --- /dev/null +++ b/helm-charts/xos-services/vtn-service/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: vtn-service +description: A Helm chart for XOS's "vtn-service" service +icon: https://guide.opencord.org/logos/cord.svg + +version: 1.0.4 +appVersion: 1.0.4 + diff --git a/helm-charts/xos-services/vtn-service/templates/_helpers.tpl b/helm-charts/xos-services/vtn-service/templates/_helpers.tpl new file mode 100644 index 0000000..40250c2 --- /dev/null +++ b/helm-charts/xos-services/vtn-service/templates/_helpers.tpl @@ -0,0 +1,77 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "vtn.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 "vtn.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "vtn.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "vtn.serviceConfig" -}} +name: vtn +accessor: + username: {{ .Values.xosAdminUser | quote }} + password: {{ .Values.xosAdminPassword | quote }} + endpoint: xos-core:50051 +logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + kafka: + class: kafkaloghandler.KafkaLogHandler + bootstrap_servers: + - "cord-kafka:9092" + topic: xos.log.vtn-service + loggers: + '': + handlers: + - console + - file + - kafka + level: DEBUG +{{- end -}} diff --git a/helm-charts/xos-services/vtn-service/templates/_tosca.tpl b/helm-charts/xos-services/vtn-service/templates/_tosca.tpl new file mode 100644 index 0000000..8777b24 --- /dev/null +++ b/helm-charts/xos-services/vtn-service/templates/_tosca.tpl @@ -0,0 +1,67 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{- define "vtn-service.serviceTosca" -}} +tosca_definitions_version: tosca_simple_yaml_1_0 + +imports: + - custom_types/servicedependency.yaml + - custom_types/serviceinstance.yaml + - custom_types/serviceinstanceattribute.yaml + - custom_types/vtnservice.yaml + +description: Configures the VTN ONOS service + +topology_template: + node_templates: + + service#vtn: + type: tosca.nodes.VTNService + properties: + name: vtn + kind: control + privateGatewayMac: 00:00:00:00:00:01 + localManagementIp: 172.27.0.1/24 + ovsdbPort: 6641 + sshUser: {{ .sshUser }} + sshKeyFile: /root/vtn/node_key + sshPort: {{ .sshPort }} + xosEndpoint: xos-chameleon:9101 + xosUser: {{ .xosAdminUser }} + xosPassword: {{ .xosAdminPassword }} + vtnAPIVersion: 2 + controllerPort: onos-cord-openflow:6653 + resync: false + + vtn_service_instance: + type: tosca.nodes.ServiceInstance + properties: + name: VTN config + requirements: + - owner: + node: service#vtn + relationship: tosca.relationships.BelongsToOne + + vtn_config: + type: tosca.nodes.ServiceInstanceAttribute + properties: + name: autogenerate + value: vtn-network-cfg + requirements: + - service_instance: + node: vtn_service_instance + relationship: tosca.relationships.BelongsToOne +{{- end -}} diff --git a/helm-charts/xos-services/vtn-service/templates/configmap.yaml b/helm-charts/xos-services/vtn-service/templates/configmap.yaml new file mode 100644 index 0000000..4349407 --- /dev/null +++ b/helm-charts/xos-services/vtn-service/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vtn +data: + serviceConfig: | +{{ include "vtn.serviceConfig" . | indent 4 }} diff --git a/helm-charts/xos-services/vtn-service/templates/deployment.yaml b/helm-charts/xos-services/vtn-service/templates/deployment.yaml new file mode 100644 index 0000000..ccecd3a --- /dev/null +++ b/helm-charts/xos-services/vtn-service/templates/deployment.yaml @@ -0,0 +1,76 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "vtn.fullname" . }} + labels: + app: {{ template "vtn.name" . }} + chart: {{ template "vtn.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "vtn.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "vtn.name" . }} + release: {{ .Release.Name }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: vtn-config + mountPath: /opt/xos/synchronizers/vtn/mounted_config.yaml + subPath: mounted_config.yaml + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + volumes: + - name: vtn-config + configMap: + name: vtn + items: + - key: serviceConfig + path: mounted_config.yaml + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-services/vtn-service/values.yaml b/helm-charts/xos-services/vtn-service/values.yaml new file mode 100644 index 0000000..f15fd29 --- /dev/null +++ b/helm-charts/xos-services/vtn-service/values.yaml @@ -0,0 +1,45 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for VTN +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/vtn-synchronizer' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +xosAdminUser: "admin@opencord.org" +xosAdminPassword: "letmein" + +sshUser: "root" +sshPort: 22 + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/helm-charts/xos-tools/kafkacat/Chart.yaml b/helm-charts/xos-tools/kafkacat/Chart.yaml new file mode 100644 index 0000000..39e9fb5 --- /dev/null +++ b/helm-charts/xos-tools/kafkacat/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: kafkacat +description: A Helm chart for kafkacat +icon: https://kafka.apache.org/images/logo.png + +version: 1.0.0 + +# version of confluentinc/cp-kafkacat container +appVersion: 4.1.2 diff --git a/helm-charts/xos-tools/kafkacat/templates/NOTES.txt b/helm-charts/xos-tools/kafkacat/templates/NOTES.txt new file mode 100644 index 0000000..5b580a1 --- /dev/null +++ b/helm-charts/xos-tools/kafkacat/templates/NOTES.txt @@ -0,0 +1,11 @@ +Thank you for installing {{ .Chart.Name }}. + +Your release is named {{ .Release.Name }}. + +You can use this container to listen to event on Kafka. +To do that, exec in the pod and run: + +kafkacat -C -b -t + + + diff --git a/helm-charts/xos-tools/kafkacat/templates/deployment.yaml b/helm-charts/xos-tools/kafkacat/templates/deployment.yaml new file mode 100644 index 0000000..de219c9 --- /dev/null +++ b/helm-charts/xos-tools/kafkacat/templates/deployment.yaml @@ -0,0 +1,41 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: kafkacat + labels: + app: kafkacat + chart: kafkacat + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: 1 + selector: + matchLabels: + app: kafkacat + release: {{ .Release.Name }} + template: + metadata: + labels: + app: kafkacat + release: {{ .Release.Name }} + spec: + containers: + - name: kafkacat + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["/bin/bash", "-c", "sleep 86400"] diff --git a/helm-charts/xos-tools/kafkacat/values.yaml b/helm-charts/xos-tools/kafkacat/values.yaml new file mode 100644 index 0000000..6b96e1b --- /dev/null +++ b/helm-charts/xos-tools/kafkacat/values.yaml @@ -0,0 +1,34 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for xossh +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +imagePullPolicy: Always + +image: + repository: 'confluentinc/cp-kafkacat' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + diff --git a/helm-charts/xos-tools/xos-tester/Chart.yaml b/helm-charts/xos-tools/xos-tester/Chart.yaml new file mode 100644 index 0000000..fda91d7 --- /dev/null +++ b/helm-charts/xos-tools/xos-tester/Chart.yaml @@ -0,0 +1,23 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: xos-tester +description: A Helm chart to run tests against an XOS deployment +icon: https://guide.opencord.org/logos/xos.svg + +version: 1.0.0 + +# version of xosproject/xos-api-tester container +appVersion: latest diff --git a/helm-charts/xos-tools/xos-tester/templates/NOTES.txt b/helm-charts/xos-tools/xos-tester/templates/NOTES.txt new file mode 100644 index 0000000..1d8c850 --- /dev/null +++ b/helm-charts/xos-tools/xos-tester/templates/NOTES.txt @@ -0,0 +1,7 @@ +Thank you for installing {{ .Chart.Name }}. + +Your release is named {{ .Release.Name }}. + +This helm chart will perform test against a running installation of XOS. + +To view the result of the tests check the logs of the container diff --git a/helm-charts/xos-tools/xos-tester/templates/_helpers.tpl b/helm-charts/xos-tools/xos-tester/templates/_helpers.tpl new file mode 100644 index 0000000..29a7e0b --- /dev/null +++ b/helm-charts/xos-tools/xos-tester/templates/_helpers.tpl @@ -0,0 +1,18 @@ +# Copyright 2018-present Open Networking Foundation +# +# 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. + +{{- define "xos-tester.config" }} +#!/usr/bin/env bash +{{ .Values.testCommand }} +{{- end }} diff --git a/helm-charts/xos-tools/xos-tester/templates/configmap.yaml b/helm-charts/xos-tools/xos-tester/templates/configmap.yaml new file mode 100644 index 0000000..5666a0b --- /dev/null +++ b/helm-charts/xos-tools/xos-tester/templates/configmap.yaml @@ -0,0 +1,26 @@ +--- +# Copyright 2017-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: xos-tester-command + labels: + app: xos-tester + chart: xos-tester + release: {{ .Release.Name }} +data: + command: | +{{ include "xos-tester.config" . | indent 4 }} diff --git a/helm-charts/xos-tools/xos-tester/templates/job.yaml b/helm-charts/xos-tools/xos-tester/templates/job.yaml new file mode 100644 index 0000000..eaa6d86 --- /dev/null +++ b/helm-charts/xos-tools/xos-tester/templates/job.yaml @@ -0,0 +1,51 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: batch/v1 +kind: Job +metadata: + name: xos-tester + labels: + app: xos-tester + chart: xos-tester + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + template: + metadata: + labels: + app: xos-tester + release: {{ .Release.Name }} + spec: + restartPolicy: Never + containers: + - name: xos-tester + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: [ + "bash", + "run_tests.sh" + ] + volumeMounts: + - name: xos-tester-command + mountPath: /src/cord-api/Tests/run_tests.sh + subPath: command/run_tests.sh + volumes: + - name: xos-tester-command + configMap: + name: xos-tester-command + items: + - key: command + path: command/run_tests.sh diff --git a/helm-charts/xos-tools/xos-tester/values.yaml b/helm-charts/xos-tools/xos-tester/values.yaml new file mode 100644 index 0000000..467ab63 --- /dev/null +++ b/helm-charts/xos-tools/xos-tester/values.yaml @@ -0,0 +1,35 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for xossh +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +imagePullPolicy: Always + +testCommand: "robot --variable timeout:300s --variable num_olts:1 --variable num_onus:1 --variable num_pon_ports:1 --variable cord_kafka:cord-kafka XosScaleValidations/xos-scale-att-workflow.robot" + +image: + repository: 'xosproject/xos-api-tester' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' diff --git a/helm-charts/xos-tools/xossh/Chart.yaml b/helm-charts/xos-tools/xossh/Chart.yaml new file mode 100644 index 0000000..e9b9631 --- /dev/null +++ b/helm-charts/xos-tools/xossh/Chart.yaml @@ -0,0 +1,22 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +name: xossh +description: A Helm chart for xossh, the XOS command line shell +icon: https://guide.opencord.org/logos/xos.svg +version: 3.0.0 + +# Runs the xosproject/xos-client container +appVersion: 3.2.3 diff --git a/helm-charts/xos-tools/xossh/README.md b/helm-charts/xos-tools/xossh/README.md new file mode 100644 index 0000000..9d08a67 --- /dev/null +++ b/helm-charts/xos-tools/xossh/README.md @@ -0,0 +1,15 @@ +To use xossh, execute the following from your `helm-charts` directory: + +``` +# start the xossh container +helm install xos-tools/xossh -n xossh + +# wait a few seconds for the container to start, then run the following +xos-tools/xossh/xossh-attach.sh +``` + +To deploy a development version of `xossh` tagged with the `candidate` tag, you can do: + +``` +helm install xos-tools/xossh/ -n xossh -f examples/xossh-candidate.yaml +``` diff --git a/helm-charts/xos-tools/xossh/templates/_helpers.tpl b/helm-charts/xos-tools/xossh/templates/_helpers.tpl new file mode 100644 index 0000000..524d996 --- /dev/null +++ b/helm-charts/xos-tools/xossh/templates/_helpers.tpl @@ -0,0 +1,47 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Copyright 2018-present Open Networking Foundation + +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. +*/}} +{{/* +Expand the name of the chart. +*/}} +{{- define "xossh.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 "xossh.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "xossh.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/helm-charts/xos-tools/xossh/templates/configmap.yaml b/helm-charts/xos-tools/xossh/templates/configmap.yaml new file mode 100644 index 0000000..2d98f49 --- /dev/null +++ b/helm-charts/xos-tools/xossh/templates/configmap.yaml @@ -0,0 +1,23 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: xossh +data: + xosshConfig: | +{{ toYaml .Values.xosshConfig | indent 4 }} diff --git a/helm-charts/xos-tools/xossh/templates/deployment.yaml b/helm-charts/xos-tools/xossh/templates/deployment.yaml new file mode 100644 index 0000000..e39375d --- /dev/null +++ b/helm-charts/xos-tools/xossh/templates/deployment.yaml @@ -0,0 +1,85 @@ +--- + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "xossh.fullname" . }} + labels: + app: {{ template "xossh.name" . }} + chart: {{ template "xossh.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "xossh.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "xossh.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + args: + - "/usr/bin/xossh" + - "-u" + - "{{ .Values.xosshConfig.accessor.username }}" + - "-p" + - "{{ .Values.xosshConfig.accessor.password }}" + - "-S" + - "{{ .Values.xosshConfig.accessor.endpoint }}" + stdin: true + tty: true + image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: certchain-volume + mountPath: /usr/local/share/ca-certificates/local_certs.crt + subPath: config/ca_cert_chain.pem + - name: xossh-config + mountPath: /opt/xos/config.yml + subPath: config.yml + volumes: + - name: certchain-volume + configMap: + name: ca-certificates + items: + - key: chain + path: config/ca_cert_chain.pem + - name: xossh-config + configMap: + name: xossh + items: + - key: xosshConfig + path: config.yml + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/helm-charts/xos-tools/xossh/values.yaml b/helm-charts/xos-tools/xossh/values.yaml new file mode 100644 index 0000000..aeccd83 --- /dev/null +++ b/helm-charts/xos-tools/xossh/values.yaml @@ -0,0 +1,62 @@ +--- +# Copyright 2018-present Open Networking Foundation +# +# 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. + +# Default values for xossh +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +nameOverride: "" +fullnameOverride: "" + +image: + repository: 'xosproject/xos-client' + tag: '{{ .Chart.AppVersion }}' + pullPolicy: 'Always' + +global: + registry: '' + +resources: {} + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +xosshConfig: + name: xossh + accessor: + username: admin@opencord.org + password: letmein + endpoint: xos-core:50051 + logging: + version: 1 + handlers: + console: + class: logging.StreamHandler + file: + class: logging.handlers.RotatingFileHandler + filename: /var/log/xos.log + maxBytes: 10485760 + backupCount: 5 + loggers: + '': + handlers: + - console + - file + level: DEBUG diff --git a/helm-charts/xos-tools/xossh/xossh-attach.sh b/helm-charts/xos-tools/xossh/xossh-attach.sh new file mode 100755 index 0000000..aeb93f0 --- /dev/null +++ b/helm-charts/xos-tools/xossh/xossh-attach.sh @@ -0,0 +1,18 @@ +#! /bin/bash + +# Copyright 2018-present Open Networking Foundation +# +# 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. + +XOSSH_POD=`kubectl get pods | grep -i xossh | cut -f 1 -d " "` +kubectl attach $XOSSH_POD -i -c xossh