Skip to main content

Industrial-strength dynamic DNS client

Project description

Update My IP

Industrial-strength dynamic DNS client

Features

  • Extensible plugin-oriented architecture
  • Built-in address provider result validation
  • Address provider redundancy with optional retry and Fibonacci backoff
  • Detailed logging
  • Dry-run mode

Installation

pip install updatemyip

Running the Application

updatemyip <dns_provider> <fqdn> [options]

Use --help to see available options.

Built-In Providers

Address Providers

Address providers are responsible for obtaining an address.

DNS Providers

DNS providers are responsible for managing a DNS record.

Development

Getting Started

pip install pipenv
pipenv install --dev
pipenv 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 updatemyip_ will automatically be imported from the following locations:

  1. $XDG_CONFIG_HOME/updatemyip/providers
  2. /etc/updatemyip/providers
  3. sys.path

For example, if you create a file at $XDG_CONFIG_HOME/updatemyip/providers/updatemyip_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 verify 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 updatemyip/providers and tests/providers.

Releases

  1. Bump VERSION in updatemyip/meta.py

  2. Update CHANGELOG.md

  3. Run release script:

    release <version>
    

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.

Files for updatemyip, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size updatemyip-0.1.1-py3-none-any.whl (11.4 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size updatemyip-0.1.1.tar.gz (8.9 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page