|
- {%- 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').items() %}
- {%- 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.items() %}
-
- {%- if host.names is defined %}
-
- {%- set clearers = [] %}
- {%- for etc_addr, etc_names in salt.hosts.list_hosts().items() %}
- {%- 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:
- {%- if 'module.run' in salt['config.get']('use_superseded', default=[]) %}
- - file.replace:
- - path: /etc/hosts
- - pattern: {{ before }}
- - repl: {{ after }}
- {%- else %}
- - name: file.replace
- - path: /etc/hosts
- - pattern: {{ before }}
- - repl: {{ after }}
- {%- endif %}
- - watch:
- - host: linux_host_{{ name }}
- - onlyif:
- - grep -q "{{ before }}" /etc/hosts
-
- {%- endif %}
-
- {%- endif %}
-
- {%- endfor %}
-
- {%- endif %}
-
- {%- endif %}
|