| {%- from "salt/map.jinja" import minion with context %} |
| {%- if minion.enabled %} |
| |
| include: |
| - salt.minion.service |
| |
| salt_minion_grains_dir: |
| file.directory: |
| - name: /etc/salt/grains.d |
| - mode: 700 |
| - makedirs: true |
| - user: root |
| - require: |
| - {{ minion.install_state }} |
| |
| salt_minion_grains_files: |
| file.managed: |
| - names: |
| - /etc/salt/grains |
| - /etc/salt/grains.d/placeholder |
| - replace: False |
| - require: |
| - file: salt_minion_grains_dir |
| |
| {%- for service_name, service in pillar.items() %} |
| {%- set support_fragment_file = service_name+'/meta/salt.yml' %} |
| {%- macro load_support_file() %}{% include support_fragment_file ignore missing %}{% endmacro %} |
| {%- set support_yaml = load_support_file()|load_yaml %} |
| |
| {%- if support_yaml and support_yaml.get('grain', {}) %} |
| {%- for name, grain in support_yaml.get('grain', {}).iteritems() %} |
| salt_minion_grain_{{ service_name }}_{{ name }}: |
| file.managed: |
| - name: /etc/salt/grains.d/{{ name }} |
| - contents: | |
| {{ grain|yaml(False)|indent(8) }} |
| - require: |
| - file: salt_minion_grains_dir |
| |
| salt_minion_grain_{{ service_name }}_{{ name }}_validity_check: |
| cmd.wait: |
| - name: python -c "import yaml; stream = file('/etc/salt/grains.d/{{ name }}', 'r'); yaml.load(stream); stream.close()" |
| - watch: |
| - file: salt_minion_grain_{{ service_name }}_{{ name }} |
| - watch_in: |
| - cmd: salt_minion_grains_file |
| {%- endfor %} |
| {%- endif %} |
| {%- endfor %} |
| |
| salt_minion_grains_file: |
| cmd.wait: |
| - name: cat /etc/salt/grains.d/* > /etc/salt/grains |
| - require: |
| - file: salt_minion_grains_files |
| |
| salt_minion_grains_publish: |
| module.wait: |
| - name: mine.update |
| - watch: |
| - cmd: salt_minion_grains_file |
| |
| {%- endif %} |