Skip to content

osal.coredns #

CoreDNS Redis Record Management

This module provides functionality for managing DNS records in Redis for use with CoreDNS. It supports various DNS record types and provides a simple interface for adding and managing DNS records.

import freeflowuniverse.herolib.lib.osal.coredns

// Create a new DNS record set
mut rs := coredns.new_dns_record_set()

// Create and populate DNS records
rs.set_soa(mbox: 'hostmaster.example.net.', ns: 'ns1.example.net.')
rs.add_srv(target: 'tcp.example.com.', port: 123)
rs.add_txt(text: 'this is a wildcard')
rs.add_mx(host: 'host1.example.net.')
rs.add_a(name: 'host1', ip: '5.5.5.5')
rs.add_aaaa(name: 'host1', ip: '2001:db8::1')
rs.add_ns(host: 'ns1.example.net.')
rs.add_ns(host: 'ns2.example.net.')

// Store records in Redis
rs.set('example.com')!

Record Types

The following DNS record types are supported:

SRV Record

SRVRecord {
    target   string  // Required: Target hostname
    port     int     // Required: Port number
    priority int     // Default: 10
    weight   int     // Default: 100
    ttl      int     // Default: 300
}

TXT Record

TXTRecord {
    text string  // Required: Text content
    ttl  int     // Default: 300
}

MX Record

MXRecord {
    host       string  // Required: Mail server hostname
    preference int     // Default: 10
    ttl        int     // Default: 300
}

A Record

ARecord {
    name string  // Required: Hostname
    ip   string  // Required: IPv4 address
    ttl  int     // Default: 300
}

AAAA Record

AAAARecord {
    name string  // Required: Hostname
    ip   string  // Required: IPv6 address
    ttl  int     // Default: 300
}

NS Record

NSRecord {
    host string  // Required: Nameserver hostname
    ttl  int     // Default: 300
}

SOA Record

SOARecord {
    mbox    string  // Required: Email address of the admin
    ns      string  // Required: Primary nameserver
    refresh int     // Default: 44
    retry   int     // Default: 55
    expire  int     // Default: 66
    minttl  int     // Default: 100
    ttl     int     // Default: 300
}

fn new_dns_record_set #

fn new_dns_record_set() DNSRecordSet

new_dns_record_set creates a new DNSRecordSet

fn play_dns #

fn play_dns(mut plbook playbook.PlayBook) !DNSRecordSet

play_dns processes DNS-related actions from heroscript

fn (DNSRecordSet) add_srv #

fn (mut rs DNSRecordSet) add_srv(args AddSRVRecordArgs)

add_srv adds an SRV record to the set

fn (DNSRecordSet) add_txt #

fn (mut rs DNSRecordSet) add_txt(args AddTXTRecordArgs)

add_txt adds a TXT record to the set

fn (DNSRecordSet) add_mx #

fn (mut rs DNSRecordSet) add_mx(args AddMXRecordArgs)

add_mx adds an MX record to the set

fn (DNSRecordSet) add_a #

fn (mut rs DNSRecordSet) add_a(args AddARecordArgs)

add_a adds an A record to the set

fn (DNSRecordSet) add_aaaa #

fn (mut rs DNSRecordSet) add_aaaa(args AddAAAARecordArgs)

add_aaaa adds an AAAA record to the set

fn (DNSRecordSet) add_ns #

fn (mut rs DNSRecordSet) add_ns(args AddNSRecordArgs)

add_ns adds an NS record to the set

fn (DNSRecordSet) set_soa #

fn (mut rs DNSRecordSet) set_soa(args SOA_Record)

set_soa sets the SOA record for the set

fn (DNSRecordSet) set #

fn (mut rs DNSRecordSet) set(args SetArgs) !

populate_redis populates Redis with the DNS records domain e.g. example.com. (not sure the . is at end)

fn (DNSRecordSet) example #

fn (mut rs DNSRecordSet) example() !

struct AAAA_Record #

@[params]
struct AAAA_Record {
pub:
	ip  string @[required]
	ttl int = 300
}

struct A_Record #

@[params]
struct A_Record {
pub:
	ip  string @[required]
	ttl int = 300
}

struct AddAAAARecordArgs #

struct AddAAAARecordArgs {
	AAAA_Record
pub:
	sub_domain string = '@'
}

struct AddARecordArgs #

struct AddARecordArgs {
	A_Record
pub:
	sub_domain string = '@'
}

struct AddMXRecordArgs #

struct AddMXRecordArgs {
	MX_Record
pub:
	sub_domain string = '@'
}

struct AddNSRecordArgs #

struct AddNSRecordArgs {
	NS_Record
pub:
	sub_domain string = '@'
}

struct AddSRVRecordArgs #

struct AddSRVRecordArgs {
	SRV_Record
pub:
	service  string @[required]
	protocol string @[required]
	host     string @[required]
}

struct AddTXTRecordArgs #

struct AddTXTRecordArgs {
	TXT_Record
pub:
	sub_domain string = '@'
}

struct CAA_Record #

@[params]
struct CAA_Record {
pub:
	flag  u8
	tag   string
	value string
}

struct CNAME_Record #

@[params]
struct CNAME_Record {
pub:
	host string
	ttl  int = 300
}

struct MX_Record #

@[params]
struct MX_Record {
pub:
	host       string @[required]
	preference int = 10
	ttl        int = 300
}

struct NS_Record #

@[params]
struct NS_Record {
pub:
	host string @[required]
	ttl  int = 300
}

struct Record #

struct Record {
pub mut:
	a     ?[]A_Record
	aaaa  ?[]AAAA_Record
	txt   ?[]TXT_Record
	cname ?[]CNAME_Record
	ns    ?[]NS_Record
	mx    ?[]MX_Record
	srv   ?[]SRV_Record
	caa   ?[]CAA_Record
	soa   ?SOA_Record
}

struct SOA_Record #

@[params]
struct SOA_Record {
pub:
	mbox    string @[required]
	ns      string @[required]
	refresh int = 44
	retry   int = 55
	expire  int = 66
	minttl  int = 100
	ttl     int = 300
}

struct SRV_Record #

@[params]
struct SRV_Record {
pub:
	target   string @[required]
	port     int    @[required]
	priority int = 10
	weight   int = 100
	ttl      int = 300
}

struct SetArgs #

struct SetArgs {
pub:
	domain     string
	key_prefix string
}

struct TXT_Record #

@[params]
struct TXT_Record {
pub:
	text string @[required]
	ttl  int = 300
}