blob: 14bd837a3aafb102e4f7ecf815f4a580c6110be1 [file] [log] [blame]
{%- from "linux/map.jinja" import network with context %}
{%- if network.enabled %}
{%- set host_dict = network.host %}
{%- if network.mine_dns_records %}
{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
{%- if node_grains.get('dns_records', []) is iterable %}
{%- for record in node_grains.get('dns_records', []) %}
{%- set record_key = node_name ~ '-' ~ loop.index %}
{%- do host_dict.update({ record_key: {'address': record.address, 'names': record.names} }) %}
{%- endfor %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- if network.get('purge_hosts', false) %}
linux_hosts:
file.managed:
- name: /etc/hosts
- source: salt://linux/files/hosts
- template: jinja
- defaults:
host_dict: {{ host_dict|yaml }}
{%- else %}
{%- for name, host in host_dict.iteritems() %}
{%- if host.names is defined %}
{%- set clearers = [] %}
{%- for etc_addr, etc_names in salt.hosts.list_hosts().iteritems() %}
{%- set names_to_clear = [] %}
{%- for host_name in host.names %}
{%- if (host.address != etc_addr) and host_name in etc_names %}
{%- do names_to_clear.append(host_name) %}
{%- endif %}
{%- endfor %}
{%- if names_to_clear != [] %}
{%- set clearer = "linux_host_" + name + "_" + etc_addr + "_clear" %}
{%- do clearers.append(clearer) %}
{{ clearer }}:
host.absent:
- ip: {{ etc_addr }}
- names: {{ names_to_clear }}
{%- endif %}
{%- endfor %}
linux_host_{{ name }}:
host.present:
- ip: {{ host.address }}
- names: {{ host.names }}
- require: {{ clearers }}
{%- if host.address in grains.ipv4 and host.names|length > 1 %}
{%- if host.names.1 in host.names.0 %}
{%- set before = host.names.1 + " " + host.names.0 %}
{%- set after = host.names.0 + " " + host.names.1 %}
{%- elif host.names.0 in host.names.1 %}
{%- set before = host.names.0 + " " + host.names.1 %}
{%- set after = host.names.1 + " " + host.names.0 %}
{%- endif %}
linux_host_{{ name }}_order_fix:
module.run:
- name: file.replace
- path: /etc/hosts
- pattern: {{ before }}
- repl: {{ after }}
- watch:
- host: linux_host_{{ name }}
- onlyif:
- grep -q "{{ before }}" /etc/hosts
{%- endif %}
{%- endif %}
{%- endfor %}
{%- endif %}
{%- endif %}