Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 1 | {%- from "linux/map.jinja" import network with context %} |
| 2 | {%- if network.enabled %} |
| 3 | |
Ales Komarek | 417e8c5 | 2017-08-25 15:10:29 +0200 | [diff] [blame] | 4 | {%- set host_dict = network.host %} |
| 5 | |
| 6 | {%- if network.mine_dns_records %} |
| 7 | |
| 8 | {%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %} |
| 9 | {%- if node_grains.get('dns_records', []) is iterable %} |
| 10 | {%- for record in node_grains.get('dns_records', []) %} |
| 11 | {%- set record_key = node_name ~ '-' ~ loop.index %} |
| 12 | {%- do host_dict.update({ record_key: {'address': record.address, 'names': record.names} }) %} |
| 13 | {%- endfor %} |
| 14 | {%- endif %} |
| 15 | {%- endfor %} |
| 16 | |
| 17 | {%- endif %} |
| 18 | |
Filip Pytloun | 86506fe | 2017-01-26 14:36:16 +0100 | [diff] [blame] | 19 | {%- if network.get('purge_hosts', false) %} |
| 20 | |
| 21 | linux_hosts: |
| 22 | file.managed: |
| 23 | - name: /etc/hosts |
| 24 | - source: salt://linux/files/hosts |
| 25 | - template: jinja |
Ales Komarek | 417e8c5 | 2017-08-25 15:10:29 +0200 | [diff] [blame] | 26 | - defaults: |
| 27 | host_dict: {{ host_dict|yaml }} |
Filip Pytloun | 86506fe | 2017-01-26 14:36:16 +0100 | [diff] [blame] | 28 | |
| 29 | {%- else %} |
| 30 | |
Ales Komarek | 417e8c5 | 2017-08-25 15:10:29 +0200 | [diff] [blame] | 31 | {%- for name, host in host_dict.iteritems() %} |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 32 | |
| 33 | {%- if host.names is defined %} |
| 34 | |
Dennis Dmitriev | 279521e | 2017-01-27 03:43:57 +0200 | [diff] [blame] | 35 | {%- set clearers = [] %} |
| 36 | {%- for etc_addr, etc_names in salt.hosts.list_hosts().iteritems() %} |
| 37 | {%- set names_to_clear = [] %} |
| 38 | {%- for host_name in host.names %} |
| 39 | {%- if (host.address != etc_addr) and host_name in etc_names %} |
| 40 | {%- do names_to_clear.append(host_name) %} |
| 41 | {%- endif %} |
| 42 | {%- endfor %} |
| 43 | {%- if names_to_clear != [] %} |
| 44 | {%- set clearer = "linux_host_" + name + "_" + etc_addr + "_clear" %} |
| 45 | {%- do clearers.append(clearer) %} |
| 46 | |
| 47 | {{ clearer }}: |
| 48 | host.absent: |
| 49 | - ip: {{ etc_addr }} |
| 50 | - names: {{ names_to_clear }} |
| 51 | |
| 52 | {%- endif %} |
| 53 | {%- endfor %} |
| 54 | |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 55 | linux_host_{{ name }}: |
| 56 | host.present: |
| 57 | - ip: {{ host.address }} |
| 58 | - names: {{ host.names }} |
Dennis Dmitriev | 279521e | 2017-01-27 03:43:57 +0200 | [diff] [blame] | 59 | - require: {{ clearers }} |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 60 | |
Ales Komarek | c8548ed | 2016-06-20 11:29:28 +0200 | [diff] [blame] | 61 | {%- if host.address in grains.ipv4 and host.names|length > 1 %} |
Ales Komarek | c00acb3 | 2016-03-05 11:05:53 +0100 | [diff] [blame] | 62 | |
Ales Komarek | c8548ed | 2016-06-20 11:29:28 +0200 | [diff] [blame] | 63 | {%- if host.names.1 in host.names.0 %} |
Ales Komarek | c00acb3 | 2016-03-05 11:05:53 +0100 | [diff] [blame] | 64 | {%- set before = host.names.1 + " " + host.names.0 %} |
| 65 | {%- set after = host.names.0 + " " + host.names.1 %} |
Ales Komarek | 878ea32 | 2016-03-07 09:58:27 +0100 | [diff] [blame] | 66 | {%- elif host.names.0 in host.names.1 %} |
Ales Komarek | c00acb3 | 2016-03-05 11:05:53 +0100 | [diff] [blame] | 67 | {%- set before = host.names.0 + " " + host.names.1 %} |
| 68 | {%- set after = host.names.1 + " " + host.names.0 %} |
| 69 | {%- endif %} |
| 70 | |
Ales Komarek | 878ea32 | 2016-03-07 09:58:27 +0100 | [diff] [blame] | 71 | linux_host_{{ name }}_order_fix: |
Ales Komarek | c00acb3 | 2016-03-05 11:05:53 +0100 | [diff] [blame] | 72 | module.run: |
| 73 | - name: file.replace |
| 74 | - path: /etc/hosts |
| 75 | - pattern: {{ before }} |
| 76 | - repl: {{ after }} |
| 77 | - watch: |
| 78 | - host: linux_host_{{ name }} |
Olivier Bourdon | 577fbf5 | 2016-11-09 14:53:02 +0100 | [diff] [blame] | 79 | - onlyif: |
| 80 | - grep -q "{{ before }}" /etc/hosts |
Ales Komarek | c00acb3 | 2016-03-05 11:05:53 +0100 | [diff] [blame] | 81 | |
| 82 | {%- endif %} |
| 83 | |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 84 | {%- endif %} |
| 85 | |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 86 | {%- endfor %} |
| 87 | |
Olivier Bourdon | 577fbf5 | 2016-11-09 14:53:02 +0100 | [diff] [blame] | 88 | {%- endif %} |
Filip Pytloun | 86506fe | 2017-01-26 14:36:16 +0100 | [diff] [blame] | 89 | |
| 90 | {%- endif %} |