Splicer

Code Climate

Allows for interactions with multiple DNS' through one abstract API. You can use this to talk to one or more DNS providers if you choose.

splice: join or connect (a rope or ropes) by interweaving the strands.

You are joining multiple DNS providers together. This can be used to transfer records from one to the other without breaking the primary provider.

Installation

Add this line to your application's Gemfile:

gem 'splicer'

Configuring

Splicer.configure do |config|
  config.register(Splicer::Dynect::Config.new('company','user','pass')) # gem 'splicer-dynect'
  config.register(Splicer::DNSMadeEasy::Config.new('user','pass')) # gem 'splicer-dns_made_easy'
end

This library does rely on 3rd party sources, so it can and will take time to publish the zones. It would be wise to put this into a background job.

Under The Hood

Splicer is a simple abstract data structure that allows you to put together DNS zones and records quickly. The providers are what take this abstract DNS model and turn it into the concrete model in some external API.

Records

All records are relative to a zone.

record = Splicer::Records::ARecord('example.com', '127.0.0.1')

Zones

Is a collection of records.

zone = Splicer::Zone.new('example.com')
zone.add_record(record)
zone.publish(:merge)

When Splicer::Zone#publish is called, the provider can be passed to only push the updates to that zone in the DNS.

Provider

Providers are adapters to a 3rd party API, such as Dynect or DNSMadeEasy. Both API's are very different but similar in many respects.

If you write a provider you MUST follow a few rules:

  • A provider must utilize the abstract model.
  • Do NOT monkey patch the abstract model. This can cause problems with other provider gems, and cause the library to be unstable.
  • Provide a way to build an abstract model from the concrete (3rd party) model. This will allow for easier export to other DNS providers.
  • If a provider does not have an ability to use/create a record such as a KEY record, then ignore it.
  • When publishing the zone, there should be ways to completely overwrite the zone and merge existing records with that zone.
  • Tests must be written.

Contributions

Any and all contributions are welcome. Be sure to create a feature branch and send pull requests. Always, always, run rspec spec or rake to ensure that all tests are passing.

Note:

As of version 2.2.0, Dynect will no longer be fully supported.