1 {%- from "influxdb/map.jinja" import server with context %}
3 {%- if server.enabled %}
5 {%- if not server.container_mode %}
8 - names: {{ server.pkgs }}
12 {{ server.prefix_dir }}/etc/influxdb:
21 - name: {{ server.prefix_dir }}/etc/influxdb/influxdb.conf
22 - source: salt://influxdb/files/influxdb.conf
24 {%- if not server.container_mode %}
26 - pkg: influxdb_packages
29 {%- if not server.container_mode %}
32 - name: /etc/default/influxdb
33 - source: salt://influxdb/files/default
36 - pkg: influxdb_packages
39 {{server.data.dir}}_influxdb:
41 - name: {{server.data.dir}}
44 - user: {{ server.service_user }}
45 - group: {{ server.service_group }}
47 {{server.data.wal_dir}}_influxdb:
49 - name: {{server.data.wal_dir}}
52 - user: {{ server.service_user }}
53 - group: {{ server.service_group }}
55 {{server.meta.dir}}_influxdb:
57 - name: {{server.meta.dir}}
60 - user: {{ server.service_user }}
61 - group: {{ server.service_group }}
66 - name: {{ server.service }}
67 # This delay is needed before being able to send data to server to create
68 # users and databases.
70 {%- if grains.get('noservices') or server.container_mode %}
74 - file: influxdb_config
75 {%- if not server.container_mode %}
76 - file: influxdb_default
79 {% set url_for_query = "http://{}:{}/query".format(server.http.bind.address, server.http.bind.port) %}
80 {% set admin_created = false %}
82 {%- if not server.container_mode and server.admin.get('user', {}).get('enabled', False) %}
83 {% set query_create_admin = "--data-urlencode \"q=CREATE USER {} WITH PASSWORD '{}' WITH ALL PRIVILEGES\"".format(server.admin.user.name, server.admin.user.password) %}
84 {% set admin_url = "http://{}:{}/query?u={}&p={}".format(server.http.bind.address, server.http.bind.port, server.admin.user.name, server.admin.user.password) %}
85 influxdb_create_admin:
87 - name: curl -f -S -POST "{{ url_for_query }}" {{ query_create_admin }} || curl -f -S -POST "{{ admin_url }}" {{ query_create_admin }}
89 - service: influxdb_service
90 {% set url_for_query = admin_url %}
91 {% set admin_created = true %}
94 # An admin must exist before creating others users
95 {%- if admin_created %}
96 {%- for user_name, user in server.get('user', {}).iteritems() %}
97 {%- if user.get('enabled', False) %}
98 {%- if user.get('admin', False) %}
99 {% set query_create_user = "--data-urlencode \"q=CREATE USER {} WITH PASSWORD '{}' WITH ALL PRIVILEGES\"".format(user.name, user.password) %}
101 {% set query_create_user = "--data-urlencode \"q=CREATE USER {} WITH PASSWORD '{}'\"".format(user.name, user.password) %}
103 influxdb_create_user_{{user.name}}:
105 - name: curl -f -S -POST "{{ url_for_query }}" {{ query_create_user }}
107 - cmd: influxdb_create_admin
108 # TODO: manage user deletion
113 {%- for db_name, db in server.get('database', {}).iteritems() %}
114 {%- if db.get('enabled', False) %}
115 {% set query_create_db = "--data-urlencode \"q=CREATE DATABASE {}\"".format(db.name) %}
116 influxdb_create_db_{{db.name}}:
118 - name: curl -f -S -POST "{{ url_for_query }}" {{ query_create_db }}
119 {%- if admin_created %}
121 - cmd: influxdb_create_admin
123 # TODO: manage database deletion
125 {% for rp in db.get('retention_policy', []) %}
126 {% set rp_name = rp.get('name', 'autogen') %}
127 {% if rp.get('is_default') %}
128 {% set is_default = 'DEFAULT' %}
130 {% set is_default = '' %}
132 {% set duration = rp.get('duration', 'INF') %}
133 {% set replication = rp.get('replication', '1') %}
134 {% if rp.get('shard_duration') %}
135 {% set shard_duration = 'SHARD DURATION {}'.format(rp.shard_duration) %}
137 {% set shard_duration = '' %}
139 {% set query_retention_policy = 'RETENTION POLICY {} ON {} DURATION {} REPLICATION {} {} {}'.format(
140 rp_name, db.name, duration, replication, shard_duration, is_default)
142 influxdb_retention_policy_{{db.name}}_{{ rp_name }}:
145 - name: curl -s -S -POST "{{ url_for_query }}" --data-urlencode "q=CREATE {{ query_retention_policy }}"|grep -v "policy already exists" || curl -s -S -POST "{{ url_for_query }}" --data-urlencode "q=ALTER {{ query_retention_policy }}"
147 - cmd: influxdb_create_db_{{db.name}}
152 # An admin must exist to manage grants, otherwise there is no user.
153 {%- if admin_created %}
154 {%- for grant_name, grant in server.get('grant', {}).iteritems() %}
155 {%- if grant.get('enabled', False) %}
156 {% set query_grant_user_access = "--data-urlencode \"q=GRANT {} ON {} TO {}\"".format(grant.privilege, grant.database, grant.user) %}
157 influxdb_grant_{{grant_name}}:
159 - name: curl -f -S -POST "{{ url_for_query }}" {{ query_grant_user_access }}
161 - cmd: influxdb_create_db_{{grant.database}}
162 - cmd: influxdb_create_user_{{grant.user}}
163 - cmd: influxdb_create_admin
164 # TODO: manage grant deletion (if needed)