Compare commits

...

2 Commits

Author SHA1 Message Date
68d93b1516
feat(keys): allow pillar based management
Introduce managed TSIG keys configuration using pillar data.

Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
2023-02-18 16:04:57 +01:00
64f51a69b5
feat(zones): allow custom options and files
- allow additional configuration options in zone blocks
- allow installation of zone files from other Salt file roots

Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
2023-02-17 21:42:29 +01:00
6 changed files with 48 additions and 0 deletions

View File

@ -6,3 +6,4 @@ include:
- .config_files - .config_files
- .file - .file
- .zones - .zones
- .keys

14
nsd/config/keys.sls Normal file
View File

@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
# vim: ft=sls
{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import mapdata as nsd with context %}
{%- from tplroot ~ "/macros.jinja" import config_file with context %}
{%- set keys = nsd.get('keys', {}) %}
{%- if keys | length > 0 %}
{{ config_file('80-generated-keys', 'generated-keys') }}
{%- endif %}

View File

@ -28,10 +28,14 @@ nsd-config-zones-file-directory:
"{{ identifier }}": "{{ identifier }}":
file.managed: file.managed:
- name: "{{ nsd.zones_dir }}/{{ zonefile_name(name, config) }}" - name: "{{ nsd.zones_dir }}/{{ zonefile_name(name, config) }}"
{%- if 'zone_source' in config %}
- source: {{ config['zone_source'] }}
{%- else %}
- source: {{ files_switch([template, template+'.jinja'], - source: {{ files_switch([template, template+'.jinja'],
lookup=identifier lookup=identifier
) )
}} }}
{%- endif %}
- mode: 644 - mode: 644
- user: root - user: root
- group: {{ nsd.rootgroup }} - group: {{ nsd.rootgroup }}

View File

@ -0,0 +1,11 @@
########################################################################
# File managed by Salt at <{{ source }}>.
# Your changes will be overwritten.
########################################################################
{%- for name, config in nsd.get('keys').items() %}
key:
name: "{{ name }}"
algorithm: "{{ config['algorithm'] }}"
secret: "{{ config['secret'] }}"
{%- endfor %}

View File

@ -1,4 +1,5 @@
{%- from "nsd/macros.jinja" import zonefile_name with context -%} {%- from "nsd/macros.jinja" import zonefile_name with context -%}
{%- set extraopts = ['allow-notify', 'request-xfr', 'outgoing-interface'] -%}
######################################################################## ########################################################################
# File managed by Salt at <{{ source }}>. # File managed by Salt at <{{ source }}>.
# Your changes will be overwritten. # Your changes will be overwritten.
@ -8,4 +9,9 @@
zone: zone:
name: "{{ name }}" name: "{{ name }}"
zonefile: "{{ nsd.zones_dir }}/{{ zonefile_name(name, config) }}" zonefile: "{{ nsd.zones_dir }}/{{ zonefile_name(name, config) }}"
{%- for option in extraopts %}
{%- if option in config %}
{{ option }}: "{{ config[option] }}"
{%- endif %}
{%- endfor %}
{%- endfor %} {%- endfor %}

View File

@ -22,6 +22,13 @@ nsd:
# # 90-generated-zones is reserved for zones generated by this formula # # 90-generated-zones is reserved for zones generated by this formula
# # 10-salt is reserved for general configuration generated by this formula # # 10-salt is reserved for general configuration generated by this formula
# If this section is present in your Pillar data,
# nsd.conf.d/80-generated-keys will be created and managed
keys:
examplekey:
algorithm: hmac-sha512
secret: encryptme
# If this section is present in your Pillar data, # If this section is present in your Pillar data,
# nsd.conf.d/90-generated-zones will be created and managed. # nsd.conf.d/90-generated-zones will be created and managed.
zones: zones:
@ -31,6 +38,11 @@ nsd:
"168.192.in-addr.arpa": {} "168.192.in-addr.arpa": {}
# NSD's include-pattern directive may be a better way to share configuration # NSD's include-pattern directive may be a better way to share configuration
# across zones than using YAML anchors. # across zones than using YAML anchors.
#
# You can load the zone file from a custom source and specify additional configuration options:
# example.com:
# zone_source: salt://zones/example.com.zone
# request-xfr: 192.168.0.1
# If this section is present in your Pillar data, # If this section is present in your Pillar data,
# nsd.conf.d/10-salt.conf will be created and managed # nsd.conf.d/10-salt.conf will be created and managed