X-Git-Url: https://gerrit.mcp.mirantis.com/gitweb?p=salt-formulas%2Finfluxdb.git;a=blobdiff_plain;f=influxdb%2Fserver.sls;h=4f9fdd261cbe2ed357b4861682f478dd452e0406;hp=c0f0ea653c33f08b201fe6f7e3a9f77a37da6847;hb=5dc4197223fd976dad72fe485a84ee4fcc55a2ec;hpb=071a93efbd6bf5377719ab70f39b54b64b49ec95 diff --git a/influxdb/server.sls b/influxdb/server.sls index c0f0ea6..4f9fdd2 100644 --- a/influxdb/server.sls +++ b/influxdb/server.sls @@ -1,18 +1,32 @@ {%- from "influxdb/map.jinja" import server with context %} + {%- if server.enabled %} +{%- if not server.container_mode %} influxdb_packages: pkg.installed: - names: {{ server.pkgs }} + - force_yes: True +{%- endif %} + +{{ server.prefix_dir }}/etc/influxdb: + file.directory: + - user: root + - group: root + - mode: 755 + - makedirs: True influxdb_config: file.managed: - - name: /etc/influxdb/influxdb.conf + - name: {{ server.prefix_dir }}/etc/influxdb/influxdb.conf - source: salt://influxdb/files/influxdb.conf - template: jinja +{%- if not server.container_mode %} - require: - pkg: influxdb_packages +{%- endif %} +{%- if not server.container_mode %} influxdb_default: file.managed: - name: /etc/default/influxdb @@ -20,6 +34,28 @@ influxdb_default: - template: jinja - require: - pkg: influxdb_packages +{%- endif %} + +{{server.data.dir}}: + file.directory: + - makedirs: True + - mode: 755 + - user: {{ server.service_user }} + - group: {{ server.service_group }} + +{{server.data.wal_dir}}: + file.directory: + - makedirs: True + - mode: 755 + - user: {{ server.service_user }} + - group: {{ server.service_group }} + +{{server.meta.dir}}: + file.directory: + - makedirs: True + - mode: 755 + - user: {{ server.service_user }} + - group: {{ server.service_group }} influxdb_service: service.running: @@ -28,14 +64,19 @@ influxdb_service: # This delay is needed before being able to send data to server to create # users and databases. - init_delay: 5 +{%- if grains.get('noservices') or server.container_mode %} + - onlyif: /bin/false +{%- endif %} - watch: - file: influxdb_config +{%- if not server.container_mode %} - file: influxdb_default +{%- endif %} {% set url_for_query = "http://{}:{}/query".format(server.http.bind.address, server.http.bind.port) %} {% set admin_created = false %} -{%- if server.admin.get('user', {}).get('enabled', false) %} +{%- if not server.container_mode and server.admin.get('user', {}).get('enabled', False) %} {% set query_create_admin = "--data-urlencode \"q=CREATE USER {} WITH PASSWORD '{}' WITH ALL PRIVILEGES\"".format(server.admin.user.name, server.admin.user.password) %} {% set admin_url = "http://{}:{}/query?u={}&p={}".format(server.http.bind.address, server.http.bind.port, server.admin.user.name, server.admin.user.password) %} influxdb_create_admin: @@ -50,8 +91,8 @@ influxdb_create_admin: # An admin must exist before creating others users {%- if admin_created %} {%- for user_name, user in server.get('user', {}).iteritems() %} - {%- if user.get('enabled', false) %} - {%- if user.get('admin', false) %} + {%- if user.get('enabled', False) %} + {%- if user.get('admin', False) %} {% set query_create_user = "--data-urlencode \"q=CREATE USER {} WITH PASSWORD '{}' WITH ALL PRIVILEGES\"".format(user.name, user.password) %} {%- else %} {% set query_create_user = "--data-urlencode \"q=CREATE USER {} WITH PASSWORD '{}'\"".format(user.name, user.password) %} @@ -67,7 +108,7 @@ influxdb_create_user_{{user.name}}: {%- endif %} {%- for db_name, db in server.get('database', {}).iteritems() %} - {%- if db.get('enabled', false) %} + {%- if db.get('enabled', False) %} {% set query_create_db = "--data-urlencode \"q=CREATE DATABASE {}\"".format(db.name) %} influxdb_create_db_{{db.name}}: cmd.run: @@ -77,13 +118,38 @@ influxdb_create_db_{{db.name}}: - cmd: influxdb_create_admin {%- endif %} # TODO: manage database deletion + + {% for rp in db.get('retention_policy', []) %} + {% set rp_name = rp.get('name', 'autogen') %} + {% if rp.get('is_default') %} + {% set is_default = 'DEFAULT' %} + {% else %} + {% set is_default = '' %} + {% endif %} + {% set duration = rp.get('duration', 'INF') %} + {% set replication = rp.get('replication', '1') %} + {% if rp.get('shard_duration') %} + {% set shard_duration = 'SHARD DURATION {}'.format(rp.shard_duration) %} + {% else %} + {% set shard_duration = '' %} + {% endif %} + {% set query_retention_policy = 'RETENTION POLICY {} ON {} DURATION {} REPLICATION {} {} {}'.format( + rp_name, db.name, duration, replication, shard_duration, is_default) + %} +influxdb_retention_policy_{{db.name}}_{{ rp_name }}: + cmd.run: + + - 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 }}" + - require: + - cmd: influxdb_create_db_{{db.name}} + {%- endfor %} {%- endif %} {%- endfor %} # An admin must exist to manage grants, otherwise there is no user. {%- if admin_created %} {%- for grant_name, grant in server.get('grant', {}).iteritems() %} - {%- if grant.get('enabled', false) %} + {%- if grant.get('enabled', False) %} {% set query_grant_user_access = "--data-urlencode \"q=GRANT {} ON {} TO {}\"".format(grant.privilege, grant.database, grant.user) %} influxdb_grant_{{grant_name}}: cmd.run: