zonesync 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de0f19d0c0fc5e8ce4abdbf8162e812bc8e9625949c569f8241f1dd3a26b1d59
4
- data.tar.gz: ac995b1a37c31ebfcc942d1b7bdf8af61d3ea542b928181d98a5339ae3ed873f
3
+ metadata.gz: 4483586b922fcb40130de86a415fdf440dd46afa556dfa45e87e0d6d398f52d7
4
+ data.tar.gz: 88cbb6f82331655a9f78d49ee9b4013c2011bd94c3bb04831b6ebd58b4b968e5
5
5
  SHA512:
6
- metadata.gz: 2ae81d95b270a1832003e80fa9b9a239fa84550baef01b2e965ea98c4d9088386cf7bda17c25dc62d91b1bb1d24fb6e743957246b38f927219844185d8eefc89
7
- data.tar.gz: a21efe23b40750c68ab57597fca878771fdf1e5738b847d818b56fb4331af83094fb78d5d340f006815c264cd80217239c2a0be59e77295ad22c797838af3657
6
+ metadata.gz: 8bdd45b0a0d43e91856f488a53f8880c3946f6ab566f9e13a54209a76b295ca76f3f6fb1e62e607594d0abea3963ddefd9576c593e804832bd2580e3b51e18fc
7
+ data.tar.gz: d5afd17873627c461936dfd62038bd471fa7c83296981daca019ba9b2614c269cfa68b865d69a54dfd543c6b9a5d9c537bfe88c12cdca4885898b7db433bfa6a
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- # zonesync
1
+ # Zonesync
2
+
3
+ [![CI Status](https://github.com/botandrose/zonesync/workflows/CI/badge.svg?branch=master)](https://github.com/botandrose/zonesync/actions?query=workflow%3ACI+branch%3Amaster)
2
4
 
3
5
  Sync your DNS host with your DNS zone file, making it easy to version your zone file and sync changes.
4
6
 
@@ -8,13 +8,21 @@ module Zonesync
8
8
  end
9
9
 
10
10
  def diffable_records
11
- DNS::Zonefile.load(read).records.map do |record|
11
+ zonefile.records.map do |record|
12
12
  Record.from_dns_zonefile_record(record)
13
13
  end.select do |record|
14
14
  %w[A AAAA CNAME MX TXT SPF NAPTR PTR].include?(record.type)
15
15
  end.sort
16
16
  end
17
17
 
18
+ private def zonefile
19
+ body = read
20
+ if body !~ /\sSOA\s/ # insert dummy SOA to trick parser if needed
21
+ body.sub!(/\n([^$])/, "\n@ 1 SOA example.com example.com ( 2000010101 1 1 1 1 )\n\\1")
22
+ end
23
+ DNS::Zonefile.load(body)
24
+ end
25
+
18
26
  def read record
19
27
  raise NotImplementedError
20
28
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zonesync
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/zonesync.rb CHANGED
@@ -3,17 +3,17 @@ require "zonesync/diff"
3
3
 
4
4
  module Zonesync
5
5
  def self.call zonefile:, credentials:
6
- Sync.new(zonefile, credentials).call
6
+ Sync.new({ provider: "Filesystem", path: zonefile }, credentials).call
7
7
  end
8
8
 
9
- class Sync < Struct.new(:zonefile, :credentials)
9
+ class Sync < Struct.new(:source, :destination)
10
10
  def call
11
- local = Provider.from({ provider: "Filesystem", path: zonefile })
12
- remote = Provider.from(credentials)
13
- operations = Diff.call(from: remote, to: local)
11
+ source = Provider.from(self.source)
12
+ destination = Provider.from(self.destination)
13
+ operations = Diff.call(from: destination, to: source)
14
14
  operations.each do |method, args|
15
15
  puts [method, args].inspect
16
- remote.send(method, args)
16
+ destination.send(method, args)
17
17
  end
18
18
  end
19
19
  end
data/zonesync.gemspec CHANGED
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "dns-zonefile", "~>1.0"
31
31
  spec.add_dependency "diff-lcs", "~>1.4"
32
32
 
33
+ spec.add_development_dependency "rake"
33
34
  spec.add_development_dependency "rspec"
34
35
  spec.add_development_dependency "webmock"
35
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zonesync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
@@ -39,6 +39,20 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '1.4'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: rspec
44
58
  requirement: !ruby/object:Gem::Requirement