• This repository has been archived on 05/Mar/2020
  • Stars
    star
    189
  • Rank 204,649 (Top 5 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 16 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Rails frontend for PowerDNS running MySQL or PostgreSQL backends

Important update

The current master branch of the PowerDNS on Rails project is in turmoil as we fast-forward the project into the future. The very old previous release can be found in the 'rails-2.3.3' branch.

Thanks for your support and understanding.

PowerDNS on Rails

Build Status Code Climate Dependency Status

PowerDNS on Rails is a Ruby on Rails application made to manage PowerDNS installations using the generic MySQL/PostgreSQL backends.

More information:

Quick Installation

Instructions for running a demo version with Vagrant is provided further down.

$ git clone git://github.com/kennethkalmer/powerdns-on-rails.git
$ cd powerdns-on-rails
$ bundle install
$ cp config/database.yml.template config/database.yml

Review config/database.yml and modify as needed. By default it will use the MySQL connection settings.

$ bundle exec rake generate_secret_token db:setup
$ bundle exec rails s

Point your browser to http://localhost:3000, and login with '[email protected]' and 'secret'.

Note on versions: PowerDNS on Rails is version-less, and the master branch will nearly always have stable useable code.

Features (current and planned)

  • RESTful architecture to support rich UI and API access
  • Multi-user support (admins, owners, API clients)
  • CLI clients to show integration capabilities
  • Conversion and import tools
  • Zone/Record Templates
  • DNS Insight
  • Full audit record of all changes
  • Macros for easy bulk updating of domains
  • Support for PowerDNS MASTER, NATIVE & SLAVE record types

Overview

PowerDNS is a reliable alternative to BIND and sports a flexible, feature rich design and support for various backends, including MySQL and PostgreSQL. This simplifies the management of thousands of zones, and provides added redundancy (by way of database replication) and opens the doors for web frontends that ease this even more.

PowerDNS on Rails is built based on our experience of managing thousands of DNS records through various (often crude) techniques, that included building zone files from databases via cron, and implementing PowerDNS for its database backends.

We first built BIND DLZ on Rails that allowed us to migrate back to BIND using a MySQL 5.0 backend, but after several failed production runs we decided to split the project off to use our existing PowerDNS infrastructure. Using Rails 2 for a interface just makes sense because we can build a rich interface and an REST API in a single go. We have a lot of integration needs, and this was our main driver.

Demo with Vagrant

There is now a vagrant/virtualbox demo environment included.

Requirements

You will need to have virtualbox and vagrant already installed.

Running locally

Once you have Vagrant installed, you can follow these steps:

$ git clone git://github.com/kennethkalmer/powerdns-on-rails.git
$ cd powerdns-on-rails
$ vagrant up

Once this command completes, you can access the powerdns-on-rails by pointing your browser to http://localhost:8080 and logging in with '[email protected]' & secret.

The first time you run this it will download a base virtual machine and bootstrap a working powerdns-on-rails system. This might take some time, use some storage space (~2GB) and bandwidth (~500MB).

Please note that this is just a demo, we don't install or configure PowerDNS itself in the VM.

PowerDNS Information

The PowerDNS project can be found at http://www.powerdns.com/. The documentation is in-depth on that site, I won't repeat anything here unless its related to this project specifically.

It is however worth noting that this interface excepts the "Generic MySQL and PgSQL backend" to be used, as per http://doc.powerdns.com/generic-mypgsql-backends.html

Database Structure

PowerDNS does not allow you to alter the database schema at all, and you're forced to use at least one set database table. It can however handle additions to the table without problems.

We also add several additional tables to accommodate users, templates, macros and other features.

Migration to PowerDNS

PowerDNS does provide a suite of migration tools, and they're all covered in the official documentation.

Testing

PowerDNS on Rails is built using extensive RSpec suites, often termed "Behaviour Driven Development". It is critical for a core service like DNS to be reliable and that all changes are correct and won't impact services offered to clients.

Apart from the extensive programmatic tests, we'll be implementing tests that actually seed a DNS database and use BIND's dig utility to query a configured PowerDNS installation.

More Repositories

1

daemon-kit

Daemon Kit aims to simplify creating Ruby daemons by providing a sound application skeleton (through a generator), task specific generators (jabber bot, etc) and robust environment management code.
Ruby
538
star
2

ruote-kit

RESTish wrapper for ruote workflow engine
Ruby
100
star
3

safely

Wrap your Ruby code a loving, error reporting embrace
Ruby
47
star
4

ratpack

Simple HTTP to XMPP/AMQP bridge built on Sinatra
Ruby
46
star
5

ember-cli-nouislider

{{range-slider}} component for ember-cli powered by noUiSlider
HTML
43
star
6

activerecord-tableless-models

DEPRECATED: Please see https://github.com/softace/activerecord-tableless
Ruby
25
star
7

re-frame-semantic-ui-react-github-widget

Using semantic-ui-react with re-frame - sample project
Clojure
21
star
8

bind-dlz-on-rails

Rails interface to completely manage a BIND DLZ installation
Ruby
19
star
9

correlate

An experiment in expressing relationships between CouchRest documents and ActiveRecord models
Ruby
14
star
10

synaptein

synaptein is a Jabber switching daemon for translating from/to other protocols to XMPP
Ruby
10
star
11

ruote-activerecord

ActiveRecord persistence and participant for ruote
Ruby
9
star
12

chef-and-nagios-presentation

Chef & Nagios Presentation
7
star
13

smsinabox

Ruby wrapper & command line tools for the SMS in a Box Service (ZA)
Ruby
7
star
14

ratchet-ember

Experimenting with combining Ratchet & Ember
JavaScript
6
star
15

resque-web-passenger

A sample rack setup to show how to deploy resque-web in its own virtual host
Ruby
5
star
16

ruote-external-workitem

Thin wrapper class for Ruote workitems when used outside of the core engine
5
star
17

ruote-kit-client

Small client library that speaks JSON to ruote-kit and provides you with bpm bliss in return
Ruby
5
star
18

postini

The postini gem is a Ruby interface on top of the Postini SOAP API's (Early Access Program) and forms part of the postini4r project
Ruby
5
star
19

re-frame-semantic-ui-react-github-tabs

Passing around components with reagent and Semantic UI- sample code
Clojure
4
star
20

ruote-rest-rails-client

Extracted from a production app, this is one way to interact with ruote-rest from inside Rails
Ruby
4
star
21

docker-stack

Ruby
4
star
22

profittrailer-setup

Shell
4
star
23

connect.sh

Simple bash script to ease SSH access from a list of hosts
Shell
3
star
24

celluloid-smtp-sample

Simple example of an SMTP server with Celluloid::IO & EventMachine
Ruby
3
star
25

portage-overlay

Some additional comforts for my portage tree
2
star
26

jquery-copyfriendly

Unobtrusive jQuery plugin to place the text of any element in an invisible text field, making sure no unnecessary whitespace is copied with to the clipboard
2
star
27

kennethkalmer.github.com

My github page
2
star
28

mua-proxy

Transparent proxy server between MUA's (Mail User Agents) and POP3 servers
Ruby
2
star
29

dotfiles

My collection of dotfiles
Emacs Lisp
2
star
30

pillow

TODO: one-line summary of your gem
Ruby
2
star
31

lorem-app

Little shoes application leveraging the lorem gem
Ruby
2
star
32

rk-em-blues

Ruby
1
star
33

partyhat

Coming soon
Ruby
1
star
34

gh-profile-ioc

Use Ruby & Javascript together in a simple example of extreme "Inversion of Control"
JavaScript
1
star
35

rubyfuza-2013

Sample code for my Rubyfuza 2013 presentation on reusing your client-side JS on the server with V8/Rhino
Ruby
1
star
36

autotest-growl-remote

autotest-growl for pure network-based growls
Ruby
1
star
37

dockerfiles

Shell
1
star
38

dsl-stats

MWeb ADSL usage reports via Slack webhooks - pet project
Clojure
1
star