From ac9c7e1d24e0ecd231ed5749a4dc559b394a9b70 Mon Sep 17 00:00:00 2001
From: Angie Wang <angie.wang@windriver.com>
Date: Mon, 4 Mar 2019 12:23:48 -0500
Subject: [PATCH] Ceilometer chart: Add polling process with ipmi functionality

This commit adds the ability to deploy a polling process with ipmi
functionality to pull ipmi samples.
Story: 2005019
Task: 29819
Signed-off-by: Angie Wang <angie.wang@windriver.com>

Change-Id: Ib61d65f9ab815faa0d750422ffb0e36406dd3ccd
---
 .../templates/bin/_ceilometer-ipmi.sh.tpl     |  22 ++++
 ceilometer/templates/daemonset-ipmi.yaml      | 123 ++++++++++++++++++
 ceilometer/values.yaml                        |  33 +++++
 3 files changed, 178 insertions(+)
 create mode 100644 ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl
 create mode 100644 ceilometer/templates/daemonset-ipmi.yaml

diff --git a/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl b/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl
new file mode 100644
index 0000000000..86d54aceaa
--- /dev/null
+++ b/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+{{/*
+Copyright 2019 The Openstack-Helm Authors.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT 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 -ex
+
+exec ceilometer-polling \
+  --polling-namespaces ipmi \
+  --config-file /etc/ceilometer/ceilometer.conf
diff --git a/ceilometer/templates/daemonset-ipmi.yaml b/ceilometer/templates/daemonset-ipmi.yaml
new file mode 100644
index 0000000000..15e58f302e
--- /dev/null
+++ b/ceilometer/templates/daemonset-ipmi.yaml
@@ -0,0 +1,123 @@
+{{/*
+Copyright 2019 The Openstack-Helm Authors.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT 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.manifests.daemonset_ipmi }}
+{{- $envAll := . }}
+
+{{- $mounts_ceilometer_ipmi := .Values.pod.mounts.ceilometer_ipmi.ceilometer_ipmi }}
+{{- $mounts_ceilometer_ipmi_init := .Values.pod.mounts.ceilometer_ipmi.init_container }}
+
+{{- $serviceAccountName := "ceilometer-ipmi" }}
+{{ tuple $envAll "ipmi" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
+---
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+  name: ceilometer-ipmi
+  annotations:
+    {{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }}
+  labels:
+{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
+spec:
+  selector:
+    matchLabels:
+{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 6 }}
+{{ tuple $envAll "ipmi" | include "helm-toolkit.snippets.kubernetes_upgrades_daemonset" | indent 2 }}
+  template:
+    metadata:
+      labels:
+{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }}
+      annotations:
+{{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" | indent 8 }}
+        configmap-bin-hash: {{ tuple "configmap-bin.yaml" . | include "helm-toolkit.utils.hash" }}
+        configmap-etc-hash: {{ tuple "configmap-etc.yaml" . | include "helm-toolkit.utils.hash" }}
+    spec:
+      serviceAccountName: {{ $serviceAccountName }}
+      affinity:
+{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_pod_anti_affinity" | indent 8 }}
+      hostNetwork: true
+      hostPID: true
+      dnsPolicy: ClusterFirstWithHostNet
+      nodeSelector:
+        {{ .Values.labels.ipmi.node_selector_key }}: {{ .Values.labels.ipmi.node_selector_value }}
+      initContainers:
+{{ tuple $envAll "ipmi" $mounts_ceilometer_ipmi_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }}
+      containers:
+        - name: ceilometer-ipmi
+{{ tuple $envAll "ceilometer_ipmi" | include "helm-toolkit.snippets.image" | indent 10 }}
+{{ tuple $envAll $envAll.Values.pod.resources.ipmi | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
+          securityContext:
+            privileged: true
+          command:
+            - /tmp/ceilometer-ipmi.sh
+          volumeMounts:
+            - name: pod-etc-ceilometer
+              mountPath: /etc/ceilometer
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/ceilometer.conf
+              subPath: ceilometer.conf
+              readOnly: true
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/api_paste.ini
+              subPath: api_paste.ini
+              readOnly: true
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/policy.json
+              subPath: policy.json
+              readOnly: true
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/event_definitions.yaml
+              subPath: event_definitions.yaml
+              readOnly: true
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/event_pipeline.yaml
+              subPath: event_pipeline.yaml
+              readOnly: true
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/pipeline.yaml
+              subPath: pipeline.yaml
+              readOnly: true
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/gnocchi_resources.yaml
+              subPath: gnocchi_resources.yaml
+              readOnly: true
+            - name: ceilometer-etc
+              mountPath: /etc/ceilometer/polling.yaml
+              subPath: polling.yaml
+              readOnly: true
+            - name: ceilometer-bin
+              mountPath: /tmp/ceilometer-ipmi.sh
+              subPath: ceilometer-ipmi.sh
+              readOnly: true
+            - name: ipmi-device
+              mountPath: {{ .Values.ipmi_device }}
+              readOnly: true
+{{ if $mounts_ceilometer_ipmi.volumeMounts }}{{ toYaml $mounts_ceilometer_ipmi.volumeMounts | indent 12 }}{{ end }}
+      volumes:
+        - name: pod-etc-ceilometer
+          emptyDir: {}
+        - name: ceilometer-etc
+          secret:
+            secretName: ceilometer-etc
+            defaultMode: 0444
+        - name: ceilometer-bin
+          configMap:
+            name: ceilometer-bin
+            defaultMode: 0555
+        - name: ipmi-device
+          hostPath:
+            path: {{ .Values.ipmi_device }}
+{{ if $mounts_ceilometer_ipmi.volumes }}{{ toYaml $mounts_ceilometer_ipmi.volumes | indent 8 }}{{ end }}
+{{- end }}
diff --git a/ceilometer/values.yaml b/ceilometer/values.yaml
index d674e3cbb4..31d733a52d 100644
--- a/ceilometer/values.yaml
+++ b/ceilometer/values.yaml
@@ -29,6 +29,9 @@ labels:
   central:
     node_selector_key: openstack-control-plane
     node_selector_value: enabled
+  ipmi:
+    node_selector_key: openstack-node
+    node_selector_value: enabled
   collector:
     node_selector_key: openstack-control-plane
     node_selector_value: enabled
@@ -56,6 +59,7 @@ images:
     ceilometer_central: docker.io/kolla/ubuntu-source-ceilometer-central:ocata
     ceilometer_collector: docker.io/kolla/ubuntu-source-ceilometer-collector:ocata
     ceilometer_compute: docker.io/kolla/ubuntu-source-ceilometer-compute:ocata
+    ceilometer_ipmi: docker.io/kolla/ubuntu-source-ceilometer-base:ocata
     ceilometer_notification: docker.io/kolla/ubuntu-source-ceilometer-notification:ocata
     dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1
     image_repo_sync: docker.io/docker:17.07.0
@@ -80,6 +84,8 @@ network:
       enabled: false
       port: 38777
 
+ipmi_device: /dev/ipmi0
+
 conf:
   ceilometer:
     DEFAULT:
@@ -1500,6 +1506,22 @@ dependencies:
           service: mongodb
         - endpoint: internal
           service: metric
+    ipmi:
+      jobs:
+        - ceilometer-db-init-mongodb
+        - ceilometer-db-sync
+        - ceilometer-rabbit-init
+        - ceilometer-ks-user
+        - ceilometer-ks-endpoints
+      services:
+        - endpoint: internal
+          service: identity
+        - endpoint: internal
+          service: oslo_db
+        - endpoint: internal
+          service: mongodb
+        - endpoint: internal
+          service: metric
     collector:
       jobs:
         - ceilometer-db-init-mongodb
@@ -1808,6 +1830,9 @@ pod:
     ceilometer_central:
       init_container: null
       ceilometer_central:
+    ceilometer_ipmi:
+      init_container: null
+      ceilometer_ipmi:
     ceilometer_collector:
       init_container: null
       ceilometer_collector:
@@ -1876,6 +1901,13 @@ pod:
       limits:
         memory: "1024Mi"
         cpu: "2000m"
+    ipmi:
+      requests:
+        memory: "124Mi"
+        cpu: "100m"
+      limits:
+        memory: "1024Mi"
+        cpu: "2000m"
     jobs:
       db_init:
         requests:
@@ -1953,6 +1985,7 @@ manifests:
   deployment_central: true
   deployment_collector: true
   daemonset_compute: true
+  daemonset_ipmi: false
   deployment_notification: true
   ingress_api: true
   job_bootstrap: true