blob: 12be6389f16d9fc408eb556d2e598667f68e7a45 [file] [log] [blame]
{%- from "influxdb/map.jinja" import server with context %}
{%- if server.enabled %}
influxdb_packages:
pkg.installed:
- names: {{ server.pkgs }}
influxdb_config:
file.managed:
- name: /etc/influxdb/influxdb.conf
- source: salt://influxdb/files/influxdb.conf
- template: jinja
- 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 }}
# This delay is needed before being able to send data to server to create
# users and databases.
- init_delay: 5
- watch:
- file: influxdb_config
- file: influxdb_default
{% 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) %}
{% 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:
cmd.run:
- name: curl -f -S -POST "{{ url_for_query }}" {{ query_create_admin }} || curl -f -S -POST "{{ admin_url }}" {{ query_create_admin }}
- require:
- service: influxdb_service
{% set url_for_query = admin_url %}
{% set admin_created = true %}
{%- endif %}
# 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) %}
{% 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) %}
{%- endif %}
influxdb_create_user_{{user.name}}:
cmd.run:
- name: curl -f -S -POST "{{ url_for_query }}" {{ query_create_user }}
- require:
- cmd: influxdb_create_admin
# TODO: manage user deletion
{%- endif %}
{%- endfor %}
{%- endif %}
{%- for db_name, db in server.get('database', {}).iteritems() %}
{%- if db.get('enabled', False) %}
{% set query_create_db = "--data-urlencode \"q=CREATE DATABASE {}\"".format(db.name) %}
influxdb_create_db_{{db.name}}:
cmd.run:
- name: curl -f -S -POST "{{ url_for_query }}" {{ query_create_db }}
{%- if admin_created %}
- require:
- cmd: influxdb_create_admin
{%- endif %}
# TODO: manage database deletion
{%- 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) %}
{% set query_grant_user_access = "--data-urlencode \"q=GRANT {} ON {} TO {}\"".format(grant.privilege, grant.database, grant.user) %}
influxdb_grant_{{grant_name}}:
cmd.run:
- name: curl -f -S -POST "{{ url_for_query }}" {{ query_grant_user_access }}
- require:
- cmd: influxdb_create_db_{{grant.database}}
- cmd: influxdb_create_user_{{grant.user}}
- cmd: influxdb_create_admin
# TODO: manage grant deletion (if needed)
{%- endif %}
{%- endfor %}
{%- endif %}
{%- endif %}