{%- from "ceilometer/map.jinja" import agent with context %}
{%- if agent.enabled %}

include:
  - ceilometer._ssl.rabbitmq

ceilometer_agent_packages:
  pkg.installed:
  - names: {{ agent.pkgs }}
  - require_in:
    - sls: ceilometer._ssl.rabbitmq

ceilometer_agent_conf:
  file.managed:
  - name: /etc/ceilometer/ceilometer.conf
  - source: salt://ceilometer/files/{{ agent.version }}/ceilometer-agent.conf.{{ grains.os_family }}
  - template: jinja
  - mode: 0640
  - group: ceilometer
  - require:
    - pkg: ceilometer_agent_packages
    - sls: ceilometer._ssl.rabbitmq

{%- if agent.get('concurrency', {}).lock_path is defined %}
ceilometer_agent_lock_path_{{ agent.concurrency.lock_path }}:
  file.directory:
  - name: {{ agent.concurrency.lock_path }}
  - user: ceilometer
  - group: ceilometer
  - mode: 750
  - makedirs: True
  - require:
    - pkg: ceilometer_agent_packages
  - require_in:
    - service: ceilometer_agent_services
{%- endif %}

{%- if agent.get('libvirt',{}).get('ssl',{}).get('enabled', False) == True %}
add_ceilometer_to_nova_group:
  user.present:
  - name: ceilometer
  - optional_groups:
    - nova
  - require:
    - pkg: ceilometer_agent_packages
{%- endif %}

{% for service_name in agent.services %}
{{ service_name }}_default:
  file.managed:
    - name: /etc/default/{{ service_name }}
    - source: salt://ceilometer/files/default
    - template: jinja
    - require:
      - pkg: ceilometer_agent_packages
    - defaults:
        service_name: {{ service_name }}
        values: {{ agent }}
    - watch_in:
      - service: ceilometer_agent_services
{% endfor %}

{% if agent.logging.log_appender -%}

{%- if agent.logging.log_handlers.get('fluentd', {}).get('enabled', False) %}
ceilometer_agent_fluentd_logger_package:
  pkg.installed:
    - name: python-fluent-logger
{%- endif %}

{% for service_name in agent.services %}
{{ service_name }}_logging_conf:
  file.managed:
    - name: /etc/ceilometer/logging/logging-{{ service_name }}.conf
    - source: salt://oslo_templates/files/logging/_logging.conf
    - template: jinja
    - mode: 0640
    - user: root
    - group: ceilometer
    - require:
      - pkg: ceilometer_agent_packages
{%- if agent.logging.log_handlers.get('fluentd', {}).get('enabled', False) %}
      - pkg: ceilometer_agent_fluentd_logger_package
{%- endif %}
    - makedirs: True
    - defaults:
        service_name: {{ service_name }}
        _data: {{ agent.logging }}
    - watch_in:
      - service: ceilometer_agent_services
{% endfor %}

{% endif %}

{%- for publisher_name, publisher in agent.get('publisher', {}).items() %}

{%- if agent.version in ['liberty', 'juno', 'kilo', 'mitaka', 'newton', 'ocata'] %}
{%- if publisher_name not in ['default', 'gnocchi', 'panko'] %}

ceilometer_publisher_{{ publisher_name }}_pkg:
  pkg.latest:
    - name: ceilometer-publisher-{{ publisher_name }}

{%- endif %}
{%- elif publisher.get('enabled', False) %}
{%- if publisher.pkg is defined %}

ceilometer_publisher_{{ publisher_name }}_pkg:
  pkg.latest:
    - name: {{ publisher.pkg }}

{%- endif %}
{%- endif %}

{%- endfor %}

ceilometer_agent_pipeline:
  file.managed:
  - name: /etc/ceilometer/pipeline.yaml
  - source: salt://ceilometer/files/{{ agent.version }}/pipeline.yaml
  - template: jinja
  - mode: 0640
  - group: ceilometer
  - require:
    - pkg: ceilometer_agent_packages

{%- if agent.version != 'kilo' %}

ceilometer_agent_event_pipeline:
  file.managed:
  - name: /etc/ceilometer/event_pipeline.yaml
  - source: salt://ceilometer/files/{{ agent.version }}/event_pipeline.yaml
  - template: jinja
  - mode: 0640
  - group: ceilometer
  - require:
    - pkg: ceilometer_agent_packages
  - watch_in:
    - service: ceilometer_agent_services

{%- endif %}

{# Starting Pike switch to polling.yaml to handle meters polling as recommended in upstream #}
{%- if agent.version not in ['liberty', 'juno', 'kilo', 'mitaka', 'newton', 'ocata'] and agent.polling is defined %}

ceilometer_agent_polling:
  file.managed:
  - name: /etc/ceilometer/polling.yaml
  - source: salt://ceilometer/files/{{ agent.version }}/polling.yaml
  - template: jinja
  - mode: 0640
  - group: ceilometer
  - require:
    - pkg: ceilometer_agent_packages
  - watch_in:
    - service: ceilometer_agent_services

{%- endif %}

ceilometer_agent_services:
  service.running:
  - names: {{ agent.services }}
  - enable: true
  {%- if grains.get('noservices') %}
  - onlyif: /bin/false
  {%- endif %}
  - watch:
    - file: ceilometer_agent_conf
    - file: ceilometer_agent_pipeline
    - sls: ceilometer._ssl.rabbitmq

{%- endif %}
