Skip to main content

Industrial-strength dynamic DNS client

Project description

MCDDNS

Continuous Integration

Mike Conigliaro's industrial-strength Dynamic Domain Name System client

Features

  • Extensible plugin-oriented architecture with a simple API
    • Address providers are responsible for obtaining an address
    • DNS providers are responsible for managing a DNS record
  • Resilient against network and endpoint failures
    • Built-in result validation for address providers
    • Use multiple address providers (keep trying until one succeeds)
    • Optional retry with Fibonacci backoff
    • Cron mode (prevents email flood if your Internet connections goes down)
  • Detailed logging
  • Dry-run mode (shows what will happen without changing anything)

Built-In Providers

Address Providers

  • aws.CheckIP: Obtains a public IPv4 address via Amazon Web Services
  • dyn.CheckIP: Obtains a public IPv4 address via Dyn
  • google.CheckIP: Obtains a public IPv4 address via Google Domains
  • ipify.IPv4: Obtains a public IPv4 address via ipify
  • ipify.IPv6: Obtains an IPv6 address via ipify

DNS Providers

Installation

pip install mcddns

Running the Application

mcddns <dns_provider> <fqdn> [options]

Use --help to see available options.

Development

Getting Started

poetry install
poetry shell
...

Running Tests

pytest

Writing Providers

A provider is any class that inherits from AddressProvider or DNSProvider. In production mode, Python modules/packages prefixed with mcddns_ will automatically be imported from the following locations:

  1. $XDG_CONFIG_HOME/mcddns/provider
  2. /etc/mcddns/provider
  3. sys.path

Example: If you create a file at $XDG_CONFIG_HOME/mcddns/provider/mcddns_foo.py with a class named Bar that inherits from one of the Provider subclasses, your module can be referenced (e.g. in command-line options) as foo.Bar.

Provider Methods

Each provider type has a set of methods that will be called in a particular order. Note that some of these methods are expected to return a specific value in order to progress to the next step.

All Providers
  1. options_pre(parser): Runs before option parsing. Use this method to add your own provider-specific command line arguments (See: argparse).
  2. options_post(parser, options): Runs after option parsing. Use this method to do things with your provider-specific command line arguments.
Address Providers
  1. fetch(options): Fetches and returns an IP address, hostname, etc.
  2. validate(options, address): Returns True if the address is valid and False otherwise
DNS Providers
  1. check(options, address): Returns True if a DNS update is required and False otherwise
  2. update(options, address): Returns True if a DNS update was successful and False otherwise

Examples

I'll write more documentation if people are interested, but for now, see the examples at mcddns/provider and tests/provider.

Releases

  1. Bump version in pyproject.toml
  2. Update CHANGELOG.md
  3. Run make release

To Do

  • Add tests for built-in providers

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcddns-1.2.0.tar.gz (10.1 kB view hashes)

Uploaded Source

Built Distribution

mcddns-1.2.0-py3-none-any.whl (10.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page