]> Frank Brehm's Git Trees - salt/states.git/commitdiff
Adding states for dynamic zones
authorFrank Brehm <frank@brehm-online.com>
Sun, 13 Mar 2016 12:10:23 +0000 (13:10 +0100)
committerFrank Brehm <frank@brehm-online.com>
Sun, 13 Mar 2016 12:10:23 +0000 (13:10 +0100)
bind/conf.sls
bind/dirs.sls
bind/files/named-dyn.conf [new file with mode: 0644]
bind/files/named-pri.conf
bind/files/named-pri1.conf [deleted file]
bind/files/named-sec.conf

index 1a2722afdf71d5eed43451356555fffcafcb369a..74291ccf5091d07d95791c7760082b1e6fe2c2f6 100644 (file)
@@ -1,6 +1,7 @@
 {%- set etc_dir = salt['pillar.get']('bind:etc-dir', '/etc/bind') -%}
 {%- set home_dir = salt['pillar.get']('bind:home-dir', '/var/cache/bind') -%}
 {%- set my_zones = salt['pillar.get']('bind:my-zones', {}) -%}
+{%- set dyn_zones = salt['pillar.get']('bind:dyn-zones', {}) -%}
 
 bind-conf_acl:
   file.managed:
@@ -78,11 +79,15 @@ bind-conf_local:
 
 {% for zone in my_zones %}
 {%- set masters = my_zones[zone]['master'] -%}
+{%- set filename = my_zones[zone].get('filename', False) -%}
+{%- if not filename -%}
+       {%- set filename = zone + ".zone" -%}
+{%- endif -%}
 {%- if grains['fqdn'] in masters %}
 bind-zone_{{ zone }}:
   file.managed:
-    - name: {{ etc_dir }}/zones/{{ zone }}.zone
-    - source: salt://bind/zones/{{ zone }}.zone
+    - name: {{ etc_dir }}/zones/{{ filename }}
+    - source: salt://bind/zones/{{ filename }}
     - user: root
     - group: root
     - mode: 644
@@ -135,6 +140,63 @@ bind-conf_sec:
     - watch_in:
       - service: bind
 
+{% for zone in dyn_zones %}
+{%- set masters = dyn_zones[zone]['master'] -%}
+{%- set filename = dyn_zones[zone].get('filename', False) -%}
+{%- if not filename -%}
+       {%- set filename = zone + ".zone" -%}
+{%- endif -%}
+{%- if grains['fqdn'] in masters %}
+bind-def-dyn-zone_{{ zone }}:
+  file.managed:
+    - name: {{ etc_dir }}/dyn/{{ filename }}.default
+    - source: salt://bind/zones/{{ filename }}
+    - user: root
+    - group: root
+    - mode: 644
+    - template: jinja
+    - backup: minion
+    - require:
+      - pkg: bind
+      - file: bind-etc-dir
+      - file: bind-dyn-zones-dir
+
+bind-dyn-zone_{{ zone }}:
+  cmd.run:
+    - name: cp {{ etc_dir }}/dyn/{{ filename }}.default {{ etc_dir }}/dyn/{{ filename }}
+    - unless:
+      - test -f {{ etc_dir }}/dyn/{{ filename }}
+    - require:
+      - pkg: bind
+      - file: bind-etc-dir
+      - file: bind-dyn-zones-dir
+      - file: bind-def-dyn-zone_{{ zone }}
+
+{%- endif %} 
+{% endfor %}
+
+bind-conf_dyn:
+  file.managed:
+    - name: {{ etc_dir }}/named-dyn.conf
+    - source: salt://bind/files/named-dyn.conf
+    - user: root
+    - group: root
+    - mode: 644
+    - template: jinja
+    - backup: minion
+    - require:
+      - pkg: bind
+      - file: bind-etc-dir
+      - file: bind-zones-dir
+{%- for zone in dyn_zones %}
+{%- set masters = dyn_zones[zone]['master'] -%}
+{%- if grains['fqdn'] in masters %}
+#      - file: bind-dyn-zone_{{ zone }}
+{%- endif -%} 
+{%- endfor %}
+    - watch_in:
+      - service: bind
+
 bind-conf:
   file.managed:
     - name: {{ etc_dir }}/named.conf
index d71825b7ae36f66e345a989c66bc48e1b7d5f12f..4f58d8fcf11fa2f0e9bc78c66312c93b993cde88 100644 (file)
@@ -31,6 +31,16 @@ bind-default-zones-dir:
       - pkg: bind
       - file: bind-etc-dir
 
+bind-dyn-zones-dir:
+  file.directory:
+    - name: {{ etc_dir }}/dyn
+    - user: bind
+    - group: bind
+    - dir_mode: 770
+    - require:
+      - pkg: bind
+      - file: bind-etc-dir
+
 bind-home-dir:
   file.directory:
     - name: {{ home_dir }}
diff --git a/bind/files/named-dyn.conf b/bind/files/named-dyn.conf
new file mode 100644 (file)
index 0000000..2b24aae
--- /dev/null
@@ -0,0 +1,53 @@
+{%- set etc_dir = salt['pillar.get']('bind:etc-dir', '/etc/bind') -%}
+{%- set bind_role = salt['pillar.get']('bind:role', 'secondary') -%}
+{%- set dyn_zones = salt['pillar.get']('bind:dyn-zones', {}) -%}
+{%- set ips = grains['ipv4'] + grains['ipv6'] -%}
+//###############################################################
+//# Bind9-Konfigurationsdatei - Dynamische Zonen
+//# {{ etc_dir }}/named-dyn.conf
+//#
+//# Host {{ grains['fqdn'] }}
+//#
+//###############################################################
+
+{% for zone in dyn_zones %}
+{%- set masters = dyn_zones[zone]['master'] -%}
+{%- set slaves = dyn_zones[zone]['slaves'] -%}
+{%- set filename = dyn_zones[zone].get('filename', False) -%}
+{%- if not filename -%}
+       {%- set filename = zone + ".zone" -%}
+{%- endif -%}
+{%- if grains['fqdn'] in masters|sort %}
+zone "{{ zone }}" {
+       type master;
+       file "{{ etc_dir }}/dyn/{{ filename }}";
+       allow-update {
+               allow-dyn-update;
+               key dyn-dns-updater;
+       };
+       allow-transfer {
+               common-allow-transfer;
+       };
+       also-notify {
+       {%- for slave in slaves|sort %}{% set ip = slaves[slave] %}
+               {{ ip }};
+       {%- endfor %}
+       };
+};
+{%- elif grains['fqdn'] in slaves %}
+zone "{{ zone }}" {
+       type slave;
+       file "{{ filename }}";
+       masters {
+       {%- for master in masters %}{% set ip = masters[master] %}
+               {{ ip }};
+       {%- endfor %}
+       };
+       allow-transfer {
+               common-allow-transfer;
+       };
+};
+{%- endif %}
+{% endfor %}
+
+# vim: ts=4 filetype=named noai
index 8786f69b4ddac1fa6388599a84ee4c60257adbdc..b5c218b42e7b4068b8f947470715b2c07b09f323 100644 (file)
@@ -31,7 +31,7 @@ zone "{{ zone }}" {
        also-notify {
        {%- for slave in slaves|sort %}{% set ip = slaves[slave] %}
                {{ ip }};
-       {%- endfor -%}
+       {%- endfor %}
        };
 };
 {%- endif -%}
diff --git a/bind/files/named-pri1.conf b/bind/files/named-pri1.conf
deleted file mode 100644 (file)
index 47222c7..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-{%- set etc_dir = salt['pillar.get']('bind:etc-dir', '/etc/bind') -%}
-{%- set bind_role = salt['pillar.get']('bind:role', 'secondary') -%}
-{%- set is_master = False -%}
-{%- if bind_role|lower == 'primary' -%}
-       {%- set is_master = True -%}
-{%- endif -%}
-{%- set my_zones = salt['pillar.get']('bind:my-zones', {}) -%}
-//###############################################################
-//# Bind9-Konfigurationsdatei - Primäre Zonen
-//# {{ etc_dir }}/named-pri.conf
-//#
-//# Host {{ grains['fqdn'] }}
-//#
-//###############################################################
-
-//###############################################################
-//# Master-Zonen (Primary)
-{%- for zone in my_zones %}
-{%- if grains('fqdn')  in my_zones.zone.slaves %}
-zone "{{ zone }}" {
-       type master;
-       file "{{ etc_dir }}/zones/{{ zone }}.zone";
-       allow-update { none; };
-       allow-transfer {
-               common-allow-transfer;
-       };
-       also-notify {
-               also-notify-uhu-banane;
-       };
-};
-
-{% endif %}
-{% endfor %}
-
-// Keine!
-
-# vim: ts=4 filetype=named noai
index 049bd915cd76caa43491423a9c6ea57c63cf43b3..a9ef53285bfd8525903b0601455e4e2b80ace9df 100644 (file)
@@ -27,7 +27,7 @@ zone "{{ zone }}" {
        masters {
        {%- for master in masters %}{% set ip = masters[master] %}
                {{ ip }};
-       {%- endfor -%}
+       {%- endfor %}
        };
        allow-transfer {
                common-allow-transfer;