dnscode/README.md
minecraftchest1@outlook.com 782aca59ab New doxygen theme.
2025-01-31 09:12:32 -06:00

49 lines
No EOL
2 KiB
Markdown

# DNScode
## Simplifying DNS Zone management
---
## About
DNScode is a project to help simplify DNS zone management, when using plain text files with servers like BIND and NSD. It provides a framework for programmatically generating zone
files with Python, allowing for more flexability, compared to other DNS as code solutions.
## Installation
``` bash
# Create working directory
mkdir dnsproject
cd dnsproject
# Create virtual envrionment (optional, but highly recomended)
python3 -m venv .venv
source .venv/bin/activate
# Install the dnscode package
pip install dnscode
```
## Usage
Import the dnscode package into a python script, create a zone object, then add records into the zone. Records can be added either via helper functions in the [dnscode.Zone](https://dnscode.minecraftchest1.us/classdnscode_1_1dnscode_1_1Zone) class, or by manually creating record objects and adding them through [dnscode.Zone.add()](https://dnscode.minecraftchest1.us/classdnscode_1_1dnscode_1_1Zone#a338bc686b7c7db2cab7827996a3f23f3). Both methods are shown in the example below.
Once the zone is setup, you can save it as a text file using [dnscode.Zone.save_file()](https://dnscode.minecraftchest1.us/classdnscode_1_1dnscode_1_1Zone#adfe5442ed2137a324f1c5ba676ba2043). Currently, it also outputs to to STDOUT. See https://code.minecraftchest1.us/minecraftchest1/dnscode/issues/5 for details.
API docs at https://dnscode.minecraftchest1.us/classdnscode_1_1dnscode_1_1Zone
```python
import dnscode
zone = dnscode.Zone(origin='example.com') # Create zone object
zone.new_SOA(mname='ns1.minecraftchest1.us.', # Create SOA
rname='admin.minecraftchest1.us.',
refresh=onemonth, retry=oneday, ttl=oneday)
zone.new_A(name='myhost', ttl=3600, host='0.0.0.0') #New A record
zone.new_AAAA(name='myhost', ttl-3600, hosts='::1')
# More helper functions in the docs
cname = dnscode.CNAME(name='mycname', ttl=60, host='example.com')
# More record objects in the docs.
zone.add(cname)
zone.save_file('example.zone')
```