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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file mcddns-1.2.0.tar.gz.

File metadata

  • Download URL: mcddns-1.2.0.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/21.5.0

File hashes

Hashes for mcddns-1.2.0.tar.gz
Algorithm Hash digest
SHA256 5bfc89a332fecf5e1f53734e69a6a5af897f7ba026beac9c66b8dca9a5970a12
MD5 4075f8c17ed06953b6e382e840b7bceb
BLAKE2b-256 c6a3e758f86bed69ac9a69cc2f1c8a580d3d6399cad011fcb4e7f06f1aa473f1

See more details on using hashes here.

File details

Details for the file mcddns-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: mcddns-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/21.5.0

File hashes

Hashes for mcddns-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ff61e2551bf943206436788d83dcba9bc7bb5300c1651d8a80952b5e94ef02e8
MD5 2e70cff8e780dd49ec0a113c848bbc2e
BLAKE2b-256 aa0392bc64d57eafa7c02126e476ea8d5fc6667dd79b8341cdbe85c269112bdd

See more details on using hashes here.

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