diff --git a/datadog/config.sls b/datadog/config.sls index e53969c..69b492f 100644 --- a/datadog/config.sls +++ b/datadog/config.sls @@ -1,61 +1,35 @@ -{% from "datadog/map.jinja" import datadog_settings with context %} -{% set config_file_path = '%s/%s'|format(datadog_settings.config_folder, datadog_settings.config_file) -%} -{% set example_file_path = '%s.example'|format(config_file_path) -%} +{% from "datadog/map.jinja" import datadog_config, datadog_install_settings, datadog_checks, latest_agent_version, parsed_version with context %} +{% set config_file_path = '%s/%s'|format(datadog_install_settings.config_folder, datadog_install_settings.config_file) -%} -datadog-example: - file.copy: +{%- if not latest_agent_version and parsed_version[1] == '5' %} +datadog_conf_installed: + file.managed: - name: {{ config_file_path }} - - source: {{ example_file_path }} - # file.copy will not overwrite a named file, so we only need to check if the example config file exists - - onlyif: test -f {{ example_file_path }} + - source: salt://datadog/files/datadog.conf.jinja + - user: dd-agent + - group: dd-agent + - mode: 600 + - template: jinja - require: - pkg: datadog-pkg - -{% if datadog_settings.api_key is defined %} -datadog-conf-api-key: - file.replace: - - name: {{ config_file_path }} - - pattern: "api_key:(.*)" - - repl: "api_key: {{ datadog_settings.api_key }}" - - count: 1 - - onlyif: test -f {{ config_file_path }} - - watch: - - pkg: datadog-pkg -{% endif %} - -datadog-conf-site: - file.replace: - - name: {{ config_file_path }} - - pattern: "(.*)site:(.*)" -{% if datadog_settings.site is defined %} - - repl: "site: {{ datadog_settings.site }}" -{% else %} - - repl: "# site: datadoghq.com" -{% endif %} - - count: 1 - - onlyif: test -f {{ config_file_path }} - - watch: - - pkg: datadog-pkg - -datadog-conf-python-version: - file.replace: +{%- else %} +datadog_yaml_installed: + file.managed: - name: {{ config_file_path }} - - pattern: "(.*)python_version:(.*)" -{% if datadog_settings.python_version is defined %} - - repl: "python_version: {{ datadog_settings.python_version }}" -{% else %} - - repl: "# python_version: 2" -{% endif %} - - count: 1 - - onlyif: test -f {{ config_file_path }} - - watch: + - source: salt://datadog/files/datadog.yaml.jinja + - user: dd-agent + - group: dd-agent + - mode: 600 + - template: jinja + - require: - pkg: datadog-pkg +{%- endif %} -{% if datadog_settings.checks is defined %} -{% for check_name in datadog_settings.checks %} +{% if datadog_checks is defined %} +{% for check_name in datadog_checks %} datadog_{{ check_name }}_yaml_installed: file.managed: - - name: {{ datadog_settings.checks_confd }}/{{ check_name }}.yaml + - name: {{ datadog_install_settings.checks_confd }}/{{ check_name }}.yaml - source: salt://datadog/files/conf.yaml.jinja - user: dd-agent - group: root diff --git a/datadog/files/conf.yaml.jinja b/datadog/files/conf.yaml.jinja index 4a02275..907cb0a 100644 --- a/datadog/files/conf.yaml.jinja +++ b/datadog/files/conf.yaml.jinja @@ -1,5 +1,7 @@ -{% if pillar.datadog.checks[check_name].init_config is not defined -%} +{% from "datadog/map.jinja" import datadog_checks with context -%} + +{% if datadog_checks[check_name].init_config is not defined -%} init_config: {% endif -%} -{{ pillar.datadog.checks[check_name] | yaml(False) }} +{{ datadog_checks[check_name] | yaml(False) }} diff --git a/datadog/files/datadog.conf.jinja b/datadog/files/datadog.conf.jinja new file mode 100644 index 0000000..c282f84 --- /dev/null +++ b/datadog/files/datadog.conf.jinja @@ -0,0 +1,10 @@ +{% from "datadog/map.jinja" import datadog_config with context -%} + +[Main] +dd_url: https://app.datadoghq.com + +{% if datadog_config.api_key is not defined -%} +api_key: +{% else -%} +api_key: {{ datadog_config.api_key }} +{% endif -%} diff --git a/datadog/files/datadog.yaml.jinja b/datadog/files/datadog.yaml.jinja new file mode 100644 index 0000000..5ccfa56 --- /dev/null +++ b/datadog/files/datadog.yaml.jinja @@ -0,0 +1,9 @@ +{% from "datadog/map.jinja" import datadog_config with context -%} + +{% if datadog_config.api_key is not defined -%} +api_key: +{% endif -%} + +{% if datadog_config | length -%} +{{ datadog_config | yaml(False) }} +{% endif -%} diff --git a/datadog/init.sls b/datadog/init.sls index da93541..b524ce2 100644 --- a/datadog/init.sls +++ b/datadog/init.sls @@ -1,4 +1,4 @@ include: - - datadog.config - datadog.install + - datadog.config - datadog.service diff --git a/datadog/install.sls b/datadog/install.sls index 3bb1941..48ed9fc 100644 --- a/datadog/install.sls +++ b/datadog/install.sls @@ -1,4 +1,4 @@ -{% from "datadog/map.jinja" import datadog_settings, latest_agent_version, parsed_version with context %} +{% from "datadog/map.jinja" import datadog_install_settings, latest_agent_version, parsed_version with context %} {%- if grains['os_family'].lower() == 'debian' %} datadog-apt-https: @@ -49,15 +49,15 @@ datadog-repo: datadog-pkg: pkg.installed: - - name: {{ datadog_settings.pkg_name }} + - name: {{ datadog_install_settings.pkg_name }} {%- if latest_agent_version %} - version: 'latest' {%- elif grains['os_family'].lower() == 'debian' %} - - version: 1:{{ datadog_settings.agent_version }}-1 + - version: 1:{{ datadog_install_settings.agent_version }}-1 {%- elif grains['os_family'].lower() == 'redhat' %} - - version: {{ datadog_settings.agent_version }}-1 + - version: {{ datadog_install_settings.agent_version }}-1 {%- endif %} - ignore_epoch: True - refresh: True - require: - - pkgrepo: datadog-repo + - pkgrepo: datadog-repo \ No newline at end of file diff --git a/datadog/map.jinja b/datadog/map.jinja index 0e7f75f..553075f0 100644 --- a/datadog/map.jinja +++ b/datadog/map.jinja @@ -7,48 +7,56 @@ {% set default_settings = { 'datadog': { - 'pkg_name': 'datadog-agent', - 'service_name': 'datadog-agent', - 'api_key': 'aaaaaaaabbbbbbbbccccccccdddddddd', - 'agent_version': 'latest', + 'config': {}, + 'checks': {}, + 'install_settings': { + 'agent_version': 'latest', + 'pkg_name': 'datadog-agent', + 'service_name': 'datadog-agent', + }, + } }%} {# Merge os_family_map into the default settings #} -{% do default_settings.datadog.update(os_family_map) %} +{% do default_settings.datadog.update(os_family_map) %} {# Merge in datadog pillar #} -{% set datadog_settings = salt['pillar.get']('datadog', default=default_settings.datadog, merge=True) %} +{% set datadog = salt['pillar.get']('datadog', default=default_settings.datadog, merge=True) %} +{% set datadog_config = datadog['config'] %} +{% set datadog_checks = datadog['checks'] %} +{% set datadog_install_settings = datadog['install_settings'] %} {# Determine if we're looking for the latest package or a specific version #} -{%- if datadog_settings.agent_version == 'latest' %} +{%- if datadog_install_settings.agent_version == 'latest' %} {%- set latest_agent_version = true %} {%- else %} {%- set latest_agent_version = false %} - {%- set parsed_version = datadog_settings.agent_version | regex_match('(([0-9]+)\.[0-9]+\.[0-9]+)(?:~(rc|beta)\.([0-9]+-[0-9]+))?') %} + {%- set parsed_version = datadog_install_settings.agent_version | regex_match('(([0-9]+)\.[0-9]+\.[0-9]+)(?:~(rc|beta)\.([0-9]+-[0-9]+))?') %} {%- endif %} + {# Determine defaults depending on specified version #} -{% if 'config_folder' not in datadog_settings %} +{% if 'config_folder' not in datadog_install_settings %} {%- if latest_agent_version or parsed_version[1] == '6' %} - {% do datadog_settings.update({'config_folder': '/etc/datadog-agent'}) %} + {% do datadog_install_settings.update({'config_folder': '/etc/datadog-agent'}) %} {%- else %} - {% do datadog_settings.update({'config_folder': '/etc/dd-agent'}) %} + {% do datadog_install_settings.update({'config_folder': '/etc/dd-agent'}) %} {%- endif %} {% endif %} -{% if 'config_file' not in datadog_settings %} +{% if 'config_file' not in datadog_install_settings %} {%- if latest_agent_version or parsed_version[1] == '6' %} - {% do datadog_settings.update({'config_file': 'datadog.yaml'}) %} + {% do datadog_install_settings.update({'config_file': 'datadog.yaml'}) %} {%- else %} - {% do datadog_settings.update({'config_file': 'datadog.conf'}) %} + {% do datadog_install_settings.update({'config_file': 'datadog.conf'}) %} {%- endif %} {% endif %} -{% if 'checks_confd' not in datadog_settings %} +{% if 'checks_confd' not in datadog_install_settings %} {%- if latest_agent_version or parsed_version[1] == '6' %} - {% do datadog_settings.update({'checks_confd': '/etc/datadog-agent/conf.d'}) %} + {% do datadog_install_settings.update({'checks_confd': '/etc/datadog-agent/conf.d'}) %} {%- else %} - {% do datadog_settings.update({'checks_confd': '/etc/dd-agent/conf.d'}) %} + {% do datadog_install_settings.update({'checks_confd': '/etc/dd-agent/conf.d'}) %} {%- endif %} -{% endif %} +{% endif %} \ No newline at end of file diff --git a/datadog/service.sls b/datadog/service.sls index 66ac8f4..62f3c76 100644 --- a/datadog/service.sls +++ b/datadog/service.sls @@ -1,13 +1,13 @@ -{% from "datadog/map.jinja" import datadog_settings with context %} -{% set config_file_path = '%s/%s'|format(datadog_settings.config_folder, datadog_settings.config_file) -%} +{% from "datadog/map.jinja" import datadog_install_settings, datadog_checks with context %} +{% set config_file_path = '%s/%s'|format(datadog_install_settings.config_folder, datadog_install_settings.config_file) -%} datadog-agent-service: service.running: - - name: {{ datadog_settings.service_name }} + - name: {{ datadog_install_settings.service_name }} - enable: True - watch: - - pkg: {{ datadog_settings.pkg_name }} + - pkg: {{ datadog_install_settings.pkg_name }} - file: {{ config_file_path }} -{%- if datadog_settings.checks is defined %} - - file: {{ datadog_settings.checks_confd }}/* +{%- if datadog_checks | length %} + - file: {{ datadog_install_settings.checks_confd }}/* {% endif %} diff --git a/datadog/uninstall.sls b/datadog/uninstall.sls index 0de4fc6..b057706 100644 --- a/datadog/uninstall.sls +++ b/datadog/uninstall.sls @@ -1,11 +1,11 @@ -{% from "datadog/map.jinja" import datadog_settings with context %} +{% from "datadog/map.jinja" import datadog_install_settings with context %} datadog-uninstall: service.dead: - - name: {{ datadog_settings.service_name }} + - name: {{ datadog_install_settings.service_name }} - enable: False pkg.removed: - pkgs: - - {{ datadog_settings.pkg_name }} + - {{ datadog_install_settings.pkg_name }} - require: - service: datadog-uninstall diff --git a/pillar.example b/pillar.example index 72f3fa9..718933f 100644 --- a/pillar.example +++ b/pillar.example @@ -1,7 +1,9 @@ datadog: - api_key: aaaaaaaabbbbbbbbccccccccdddddddd - site: datadoghq.com - python_version: 2 + config: + api_key: aaaaaaaabbbbbbbbccccccccdddddddd + site: datadoghq.com + python_version: 2 + checks: process: init_config: @@ -14,3 +16,6 @@ datadog: - host: 127.0.0.1 name: sshd port: 22 + + install_settings: + agent_version: latest diff --git a/test/pillar/datadog.sls b/test/pillar/datadog.sls index 74290f0..edaa263 100644 --- a/test/pillar/datadog.sls +++ b/test/pillar/datadog.sls @@ -1,9 +1,14 @@ datadog: - api_key: aaaaaaaabbbbbbbbccccccccdddddddd - site: datadoghq.com - python_version: 2 + config: + api_key: aaaaaaaabbbbbbbbccccccccdddddddd + site: datadoghq.com + python_version: 2 + checks: directory: instances: - directory: "/srv/pillar" name: "pillars" + + install_settings: + agent_version: latest