Skip to content

An ExternalDNS webhook provider that integrates with Mikrotik RouterOS devices.

Notifications You must be signed in to change notification settings

boxstep/external-dns-routeros-provider

 
 

Repository files navigation

external-dns-routeros-provider

A RouterOS provider for external-dns

This repo provides an external-dns webhook provider capable of integrating with devices running Mikrotik's RouterOS.


Usage

The docker image can be pulled from docker.io/benfiola/external-dns-routeros-provider:latest.

This webhook server is intended to be run as a sidecar alongside external-dns - such that the webhook is connectable via localhost:8888. An example deployment can be found here.

Configuration

Configuring the webhook can be done via the environment or via CLI arguments.

CLI Environment Variable Description
--filter-exclude EXTERNAL_DNS_ROUTEROS_PROVIDER_FILTER_EXCLUDE (Optional) domain name to exclude from webhook processing - can be used multiple times
--filter-include EXTERNAL_DNS_ROUTEROS_PROVIDER_FILTER_INCLUDE (Optional) domain name to include in webhook processing - can be used multiple times
--filter-regex-exclude EXTERNAL_DNS_ROUTEROS_PROVIDER_FILTER_REGEX_EXCLUDE (Optional) domain name regex to exclude from webhook processing
--filter-regex-include EXTERNAL_DNS_ROUTEROS_PROVIDER_FILTER_REGEX_INCLUDE (Optional) domain name regex to include in webhook processing
--log-level EXTERNAL_DNS_ROUTEROS_PROVIDER_LOG_LEVEL (Optional) log level (error, warning, info, debug), default: info
--routeros-address EXTERNAL_DNS_ROUTEROS_PROVIDER_ROUTEROS_ADDRESS routeros device <host>:<port>
--routeros-password EXTERNAL_DNS_ROUTEROS_PROVIDER_ROUTEROS_PASSWORD routeros password
--routeros-username EXTERNAL_DNS_ROUTEROS_PROVIDER_ROUTEROS_USERNAME routeros username
--server-host EXTERNAL_DNS_ROUTEROS_PROVIDER_SERVER_HOST (Optional) server host to listen on, default: 127.0.0.1
--server-port EXTERNAL_DNS_ROUTEROS_PROVIDER_SERVER_PORT (Optional) server port to listen on, default: 8888

Development

I personally use vscode as an IDE. For a consistent development experience, this project is also configured to utilize devcontainers. If you're using both - and you have the Dev Containers extension installed - you can follow the introductory docs to quickly get started.

NOTE: Helper scripts are written under the assumption that they're being executed within a dev container.

Installing tools

From the project root, run the following to install useful tools. Currently, this includes:

  • kubectl
  • minikube
cd /workspaces/external-dns-routeros-provider
make install-tools

Creating a development environment

From the project root, run the following to create a development environment to test the provider with:

cd /workspaces/external-dns-routeros-provider
make dev-env

This will:

  • Create a new minikube cluster
  • Apply external-dns CRDs
  • Start a local routeros container
  • Wait for routeros to be accessible

Run end-to-end tests

With a development environment deployed, you can run end-to-end tests to confirm the provider functions as expected:

cd /workspaces/external-dns-routeros-provider
make e2e-test

Creating a debug script

Copy the ./dev/dev.go.template script to ./dev/dev.go, then run it to start the provider. ./dev/dev.go is ignored by git and can be modified as needed to help facilitate local development.

Additionally, the devcontainer is configured with a vscode launch configuration that points to ./dev/dev.go. You should be able to launch (and attach a debugger to) the webhook via this vscode launch configuration.

About

An ExternalDNS webhook provider that integrates with Mikrotik RouterOS devices.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 93.6%
  • Makefile 5.7%
  • Other 0.7%