Skip to content

tjamet/mohotani

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mohotani

A bot to keep your DNS records up to date

Mohotani is designed to keep your DNS (A) records up to date with your current application needs.

It currently supports a single host, assumes that the whole application is served by a single reverse proxy (i.e. all DNS have the same A records) and can even act as a dynamic DNS provider.

Mohotani is mainly composed of 3 components:

  • DNS lister that provides the list of all domains your application needs
  • IP resolver that resolves ip addresses A records shall resolve
  • DNS provider to update each A records

Supported DNS provider

Mohotani supports natively gandi live DNS api as well as logging the changes to stdout.

Supported IP resolver

Mohotani supports resolving static IP addresses provided on command line as well as polling public IP addresses using the IPIFY service.

Supported domain lister

Mohotani supports resolving required domains provided on command line as well as polling docker setup and extract required domains from the traefik Host matcher. The labels are extracted from the traefik.frontend.rule label from either running containers or created services.

Docker support

The docker support can be achieved on a single node. In such a case, mohotani should be provided an access to the docker host, either by running it on the same host, or to provide it the DOCKER_HOST (and possibly other) environment variable.

It can also support swarm mode deployements. In such a case, mohotani should be provided an access to any swarm manager, as before, either by running on the same host or by providing the DOCKER_HOST environment variable.

The setup can be checked by running:

docker container ls # for container support
docker service ls # for swarm mode support

Get mohotani

Mohotani can be installed from any go environment by runing the following:

go get -u github.com/tjamet/mohotani/cli/mohotani
mohotani --help

Or by running a container:

docker run --rm tjamet/mohotani --help

In order to run mohotani in a container with docker support, you should consider exposing the docker socket to the container:

docker run -d --restart always -v /var/run/docker.sock:/var/run/docker.sock tjamet/mohotani <...>

When using the swarm mode, you can even create a service and benefit the docker way to manage and share secrets. For example to run the mohotani using gandi live DNS together with the docker traefik parsing you could run:

echo '<api key>' | docker secret create gandi-api-key -
docker service create \
    --name mohotani \
    --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
    --secret gandi-api-key \
    --constraint 'node.role==manager' \
    tjamet/mohotani \
    --gandi --gandi.key-file /run/secrets/gandi-api-key \
    --domains.docker \
    --ips.ipify

Contributing

Mohotani is designed to support much more providers and backends and I will be happy to receive contributions. If you have questions, suggestions, bugs please open an issue. If you want to submit the code, create the issue and send us a pull request for review.

About

A bot to keep your DNS records up to date

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published