diff --git a/consul/defaults.yaml b/consul/defaults.yaml index 69b87ce..f7b540a 100644 --- a/consul/defaults.yaml +++ b/consul/defaults.yaml @@ -11,3 +11,4 @@ consul: retry_join: [] retry_interval: 30s datacenter: "main" + register: [] diff --git a/consul/files/services.json b/consul/files/services.json new file mode 100644 index 0000000..7899c9a --- /dev/null +++ b/consul/files/services.json @@ -0,0 +1,16 @@ +{% from "consul/map.jinja" import consul with context %} +{ + "services": [ + {% for service in consul.register.items() %} + { + {% for key, value in service.items() %} + {% if key == 'script' %} + "{{ script }}": "/opt/consul/scripts/"{{ value.split('/')[-1] }}{% if not loop.last %},{% endif %} + {% else %} + "{{ key }}": {{ value | json}}{% if not loop.last %},{% endif %} + {% endif %} + {% endfor %} + }{% if not loop.last %},{% endif %} + {% endfor %} + ] +} diff --git a/consul/init.sls b/consul/init.sls index e97404b..e9c8b20 100644 --- a/consul/init.sls +++ b/consul/init.sls @@ -85,6 +85,36 @@ consul_config: - require: - user: consul +{% for service in consul.se %} +{% set outer_loop = loop %} +{% for check in service %} +{% if check.script %} +consul_service_register_{{ outer_loopindex }}_{{ loop.index }}: + file.managed: + - source: {{ check.script }} + - name: /opt/consul/scripts/{{ check.script.split('/')[-1] }} + - template: jinja + - user: consul + - group: consul + - mode: 0755 +{% endif %} +{% endfor %} +{% endfor %} + +consul_service_register_config: + file.managed: + - source: salt://consul/files/services.json + - name: /etc/consul.d/services.json + - template: jinja + {% if consul.service != False %} + - watch_in: + - service: consul + {% endif %} + - user: consul + - group: consul + - require: + - user: consul + {% if consul.service != False %} consul_service: service.running: diff --git a/pillar.example b/pillar.example index fab0764..6202750 100644 --- a/pillar.example +++ b/pillar.example @@ -11,3 +11,8 @@ consul: retry_join: - 1.1.1.1 - 2.2.2.2 + register: + - name: Redis + checks: + - script: salt://files/consul/check_redis.py + interval: 10s