Added telegraf as a k8s daemonSet

Change-Id: I8813d3f1e8d02037011895021336ac98fdbe0956
Closes-Bug: PROD-21822
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-conf.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-conf.yaml
new file mode 100644
index 0000000..4e33a7e
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-conf.yaml
@@ -0,0 +1,82 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+  name: telegraf-cfg
+  namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+  labels:
+    addonmanager.kubernetes.io/mode: Reconcile
+data:
+  telegraf.conf: |+
+    [global_tags]
+
+      {%- if common.addons.telegraf.global_tags is defined %}
+        {%- for tag_name, tag_value in common.addons.telegraf.global_tags.iteritems() %}
+          {{ tag_name }} = "{{ tag_value }}"
+      {%- endfor %}
+      {%- endif %}
+
+    [agent]
+      {%- if common.addons.telegraf.agent.interval is defined %}
+      interval = "{{ common.addons.telegraf.agent.interval }}s"
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.round_interval is defined %}
+      round_interval = {{ common.addons.telegraf.agent.round_interval | lower }}
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.metric_batch_size is defined %}
+      metric_batch_size = {{ common.addons.telegraf.agent.metric_batch_size }}
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.metric_buffer_limit is defined %}
+      metric_buffer_limit = {{ common.addons.telegraf.agent.metric_buffer_limit }}
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.collection_jitter is defined %}
+      collection_jitter = "{{ common.addons.telegraf.agent.collection_jitter }}s"
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.flush_interval is defined %}
+      flush_interval = "{{ common.addons.telegraf.agent.flush_interval }}s"
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.flush_jitter is defined %}
+      flush_jitter = "{{ common.addons.telegraf.agent.flush_jitter }}s"
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.precision is defined %}
+      precision = "{{ common.addons.telegraf.agent.precision }}"
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.logfile is defined %}
+      logfile = "{{ common.addons.telegraf.agent.logfile }}"
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.debug is defined %}
+      debug = {{ common.addons.telegraf.agent.debug | lower }}
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.quiet is defined %}
+      quiet = {{ common.addons.telegraf.agent.quiet | lower }}
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.hostname is defined %}
+      hostname = "{{ common.addons.telegraf.agent.hostname }}"
+      {%- endif %}
+
+      {%- if common.addons.telegraf.agent.omit_hostname is defined %}
+      omit_hostname = {{ common.addons.telegraf.agent.omit_hostname | lower }}
+      {%- endif %}
+
+    [[inputs.disk]]
+      ignore_fs = ["tmpfs", "devtmpfs"]
+    [[inputs.diskio]]
+    [[inputs.kernel]]
+    [[inputs.mem]]
+    [[inputs.processes]]
+    [[inputs.swap]]
+    [[inputs.system]]
+    [[outputs.prometheus_client]]
+      listen = "0.0.0.0:9126"
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-ds.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-ds.yaml
new file mode 100644
index 0000000..3614124
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-ds.yaml
@@ -0,0 +1,76 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: telegraf
+  namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+  labels:
+    k8s-app: telegraf
+    version: v1
+    kubernetes.io/cluster-service: "true"
+    beta.kubernetes.io/telegraf-ds-ready: "true"
+spec:
+  template:
+    metadata:
+      labels:
+        k8s-app: telegraf
+        version: v1
+        kubernetes.io/cluster-service: "true"
+      annotations:
+        scheduler.alpha.kubernetes.io/critical-pod: ''
+        seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
+    spec:
+      priorityClassName: system-node-critical
+      serviceAccountName: telegraf
+      tolerations:
+      - key: node-role.kubernetes.io/master
+      containers:
+      - name: telegraf
+        image: {{ common.addons.telegraf.image }}
+        env:
+        - name: HOSTNAME
+          valueFrom:
+            fieldRef:
+              fieldPath: spec.nodeName
+        - name: "HOST_PROC"
+          value: "/rootfs/proc"
+        - name: "HOST_SYS"
+          value: "/rootfs/sys"
+        resources:
+          limits:
+            memory: {{ common.addons.telegraf.resources.limits.memory }}
+          requests:
+            memory: {{ common.addons.telegraf.resources.requests.memory }}
+        volumeMounts:
+        - name: sys
+          mountPath: /rootfs/sys
+          readOnly: true
+        - name: docker-socket
+          mountPath: /var/run/docker.sock
+          readOnly: true
+        - name: proc
+          mountPath: /rootfs/proc
+          readOnly: true
+        - name: utmp
+          mountPath: /var/run/utmp
+          readOnly: true
+        - name: telegraf-cfg
+          mountPath: /etc/telegraf
+      terminationGracePeriodSeconds: 30
+      volumes:
+      - name: sys
+        hostPath:
+          path: /sys
+      - name: docker-socket
+        hostPath:
+          path: /var/run/docker.sock
+      - name: proc
+        hostPath:
+          path: /proc
+      - name: utmp
+        hostPath:
+          path: /var/run/utmp
+      - name: telegraf-cfg
+        configMap:
+          name: telegraf-cfg
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-ns.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-ns.yaml
new file mode 100644
index 0000000..473feab
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-ns.yaml
@@ -0,0 +1,9 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+kind: Namespace
+apiVersion: v1
+metadata:
+  name: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+  labels:
+    k8s-app: telegraf
+    addonmanager.kubernetes.io/mode: Reconcile
diff --git a/kubernetes/files/kube-addons/telegraf/telegraf-sa.yaml b/kubernetes/files/kube-addons/telegraf/telegraf-sa.yaml
new file mode 100644
index 0000000..e342827
--- /dev/null
+++ b/kubernetes/files/kube-addons/telegraf/telegraf-sa.yaml
@@ -0,0 +1,43 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  labels:
+    addonmanager.kubernetes.io/mode: Reconcile
+  name: telegraf
+  namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
+---
+apiVersion: rbac.authorization.k8s.io/v1beta1
+kind: ClusterRole
+metadata:
+  name: telegraf
+  labels:
+    addonmanager.kubernetes.io/mode: Reconcile
+rules:
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  - namespaces
+  verbs:
+  - "get"
+  - "watch"
+  - "list"
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: telegraf
+  labels:
+    k8s-app: telegraf
+    kubernetes.io/cluster-service: "true"
+    addonmanager.kubernetes.io/mode: Reconcile
+roleRef:
+  kind: ClusterRole
+  name: telegraf
+  apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+  name: telegraf
+  namespace: {{ common.addons.telegraf.get('namespace', 'stacklight') }}
diff --git a/kubernetes/master/kube-addons.sls b/kubernetes/master/kube-addons.sls
index 86a6c4f..936d89c 100644
--- a/kubernetes/master/kube-addons.sls
+++ b/kubernetes/master/kube-addons.sls
@@ -367,6 +367,21 @@
 
 {% endif %}
 
+{%- if common.addons.get('telegraf', {}).get('enabled') %}
+{%- set telegraf_resources = ['conf', 'ns', 'sa', 'ds'] %}
+
+{%- for resource in telegraf_resources %}
+/etc/kubernetes/addons/telegraf/telegraf-{{ resource }}.yaml:
+  file.managed:
+    - source: salt://kubernetes/files/kube-addons/telegraf/telegraf-{{ resource }}.yaml
+    - template: jinja
+    - group: root
+    - dir_mode: 755
+    - makedirs: True
+{%- endfor %}
+
+{% endif %}
+
 {%- if common.addons.get('dashboard', {'enabled': False}).enabled %}
 
 {%- set dashboard_resources = ['deployment', 'secret', 'service', 'serviceaccount'] %}