Skip to main content

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

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

If you're not sure about the file name format, learn more about wheel file names.

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.

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page