Add support for clustering
diff --git a/README.rst b/README.rst
index c2f5587..0105444 100644
--- a/README.rst
+++ b/README.rst
@@ -64,6 +64,28 @@
idb02:
location: idb02.local:9096
+InfluxDB cluster:
+
+.. code-block:: yaml
+
+ influxdb:
+ server:
+ enabled: true
+ meta:
+ bind:
+ address: 0.0.0.0
+ port: 8088
+ http_address: 0.0.0.0
+ http_port: 8091
+ cluster:
+ members:
+ - host: idb01.local
+ port: 8091
+ - host: idb02.local
+ port: 8091
+ - host: idb03.local
+ port: 8091
+
Deploy influxdb apt repository (using linux formula):
.. code-block:: yaml
diff --git a/influxdb/files/default b/influxdb/files/default
new file mode 100644
index 0000000..20d854e
--- /dev/null
+++ b/influxdb/files/default
@@ -0,0 +1,11 @@
+{%- from "influxdb/map.jinja" import server with context -%}
+{%- if server.cluster is defined %}
+{%- for member in server.cluster.members %}
+{%- if member.host != grains.fqdn %}
+INFLUXD_OPTS="-join {{ member.host }}:{{ member.port }}"
+{%- endif %}
+{%- endfor %}
+{%- endif %}
+{#-
+vim: syntax=jinja
+-#}
diff --git a/influxdb/files/influxdb.conf b/influxdb/files/influxdb.conf
index 605ed62..76c9633 100644
--- a/influxdb/files/influxdb.conf
+++ b/influxdb/files/influxdb.conf
@@ -21,6 +21,7 @@
### about the InfluxDB cluster.
###
+{%- if server.meta.enabled %}
[meta]
# Where the metadata/raft database is stored
dir = "/var/lib/influxdb/meta"
@@ -33,6 +34,14 @@
# The default duration for leases.
lease-duration = "1m0s"
+{%- else %}
+[meta]
+ enabled = false
+{%- endif %}
+ {%- if server.get('meta', {}).bind is defined %}
+ bind-address = "{{ server.meta.bind.address }}:{{ server.admin.bind.port }}"
+ http-bind-address = "{{ server.meta.bind.http_address }}:{{ server.admin.bind.http_port }}"
+ {%- endif %}
###
### [data]
@@ -43,6 +52,7 @@
### defaults should work for most systems.
###
+{%- if server.data.enabled %}
[data]
# Controls if this node holds time series data shards in the cluster
enabled = true
@@ -86,6 +96,10 @@
# block in a TSM file. Larger numbers may yield better compression
# but could incur a performance penalty when querying
# max-points-per-block = 1000
+{%- else %}
+[data]
+ enabled = false
+{%- endif %}
###
### [cluster]
diff --git a/influxdb/map.jinja b/influxdb/map.jinja
index 3c63303..a71c157 100644
--- a/influxdb/map.jinja
+++ b/influxdb/map.jinja
@@ -20,6 +20,10 @@
bind:
address: 0.0.0.0
port: 8083
+ data:
+ enabled: true
+ meta:
+ enabled: true
{%- endload %}
{%- set server = salt['grains.filter_by'](base_defaults, merge=salt['pillar.get']('influxdb:server')) %}
diff --git a/influxdb/server.sls b/influxdb/server.sls
index 0c310f7..06643b5 100644
--- a/influxdb/server.sls
+++ b/influxdb/server.sls
@@ -13,11 +13,20 @@
- require:
- pkg: influxdb_packages
+influxdb_default:
+ file.managed:
+ - name: /etc/default/influxdb
+ - source: salt://influxdb/files/default
+ - template: jinja
+ - require:
+ - pkg: influxdb_packages
+
influxdb_service:
service.running:
- enable: true
- name: {{ server.service }}
- watch:
- file: influxdb_config
+ - file: influxdb_default
{%- endif %}
diff --git a/metadata/service/server/cluster.yml b/metadata/service/server/cluster.yml
new file mode 100644
index 0000000..4c330c4
--- /dev/null
+++ b/metadata/service/server/cluster.yml
@@ -0,0 +1,20 @@
+applications:
+- influxdb
+classes:
+- service.influxdb.support
+parameters:
+ influxdb:
+ server:
+ enabled: true
+ admin:
+ bind:
+ address: 0.0.0.0
+ http:
+ bind:
+ address: 0.0.0.0
+ meta:
+ bind:
+ address: 0.0.0.0
+ port: 8088
+ http_address: 0.0.0.0
+ port: 8091
diff --git a/tests/pillar/cluster.sls b/tests/pillar/cluster.sls
new file mode 100644
index 0000000..19911cb
--- /dev/null
+++ b/tests/pillar/cluster.sls
@@ -0,0 +1,17 @@
+influxdb:
+ server:
+ enabled: true
+ meta:
+ bind:
+ address: 0.0.0.0
+ port: 8088
+ http_address: 0.0.0.0
+ http_port: 8091
+ cluster:
+ members:
+ - host: idb01.local
+ port: 8091
+ - host: idb02.local
+ port: 8091
+ - host: idb03.local
+ port: 8091
diff --git a/tests/pillar/server.sls b/tests/pillar/single.sls
similarity index 100%
rename from tests/pillar/server.sls
rename to tests/pillar/single.sls