diff --git a/.gitea/workflows/test.yaml b/.gitea/workflows/test.yaml
new file mode 100644
index 0000000..ef09de8
--- /dev/null
+++ b/.gitea/workflows/test.yaml
@@ -0,0 +1,63 @@
+---
+name: Test
+
+on: # noqa: yaml[truthy]
+ push:
+ branches:
+ - main
+ - feature/**
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ lint:
+ name: Lint
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: '3.11'
+
+ - name: Install tools
+ run: |
+ pip install --no-cache-dir yamllint ansible-lint
+
+ - name: Run yamllint
+ run: yamllint -d relaxed .
+
+ - name: Run ansible-lint
+ run: ansible-lint --strict --profile=production
+
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ needs: lint
+ if: github.event_name == 'pull_request'
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: '3.11'
+
+ - name: Install podman
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y podman
+
+ - name: Install dependencies
+ run: |
+ pip install --no-cache-dir \
+ ansible \
+ molecule[podman] \
+ podman-compose \
+ pyyaml \
+ jinja2
+
+ - name: Run Molecule tests
+ run: molecule test
diff --git a/CONFIGURATION_GRAMMAR.md b/CONFIGURATION_GRAMMAR.md
index 2c8442a..211a80f 100644
--- a/CONFIGURATION_GRAMMAR.md
+++ b/CONFIGURATION_GRAMMAR.md
@@ -458,6 +458,7 @@ options:
-
- address:
port:
+ tls:
# DNSSEC
dnssec_enable: # DEPRECATED in 9.15+
@@ -540,6 +541,19 @@ options:
# Logging
querylog:
+ # DNSTAP - DNS traffic capture
+ dnstap: # List of message types to capture
+ - type: # Message type (required)
+ log: # Optional: specific direction
+ dnstap_output: # Output destination (required if dnstap is set)
+ output_type: # Output type: file or unix socket (required)
+ output_file: # File path or socket path (required)
+ size: # Optional: Max file size before rotation
+ versions: # Optional: Number of versions to keep
+ suffix: # Optional: Rotation suffix type
+ dnstap_identity: # Optional: Identity string (defaults to hostname)
+ dnstap_version: # Optional: Version string (defaults to BIND version)
+
# Zone management
check_names:
check_dup_records:
@@ -593,7 +607,8 @@ options:
forwarders:
- 1.1.1.1
- - 8.8.8.8
+ - address: 8.8.8.8
+ tls: dot-tls
dnssec_validation: auto
@@ -917,6 +932,7 @@ zones:
-
- address:
port:
+ tls:
# DNSSEC
dnssec_policy: # DNSSEC policy to use
@@ -1017,7 +1033,8 @@ zones:
forward: only
forwarders:
- 10.0.0.1
- - 10.0.0.2
+ - address: 10.0.0.2
+ tls: internal-tls
```
---
@@ -1079,9 +1096,9 @@ addresses:
- 10.0.0.0/8
```
-### Address with Port/DSCP
+### Address with Port/TLS
-For options accepting `address [port X] [dscp Y]`:
+For options accepting `address [port X] [tls Y]` (e.g., `forwarders`):
```yaml
# Simple list
@@ -1089,27 +1106,28 @@ forwarders:
- 1.1.1.1
- 8.8.8.8
-# With source port/dscp
+# With global port/tls
forwarders:
- port: 5353
- dscp: 46
+ port: 853
+ tls: dot-tls
addresses:
- 1.1.1.1
- 8.8.8.8
-# Per-address port/dscp
+# Per-address port/tls
forwarders:
- address: 1.1.1.1
port: 53
- address: 8.8.8.8
- port: 5353
- dscp: 46
+ port: 853
+ tls: cloudflare-tls
# Mixed format
forwarders:
- 1.1.1.1
- address: 8.8.8.8
- port: 5353
+ port: 853
+ tls: dot-tls
```
### Address with Key/TLS
diff --git a/README.md b/README.md
index 8330195..9491dee 100644
--- a/README.md
+++ b/README.md
@@ -126,38 +126,43 @@ Simple options are defined just as that.
```
Some options have several optional parameters. For those, a somewhat flexible
-configuration format has been created
+configuration format has been created. Common patterns include:
+
+- **Address with Port/DSCP**: Used by options like `primaries`, `parental_agents` (e.g., `address [ port ] [ dscp ]`)
+- **Address with Port/TLS**: Used by options like `forwarders` (e.g., `address [ port ] [ tls ]`)
+
```
- IP_PORT_DSCP_OPTION: # Any option that is defined as one of:
- #