zonesync 0.1.1 → 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: 8092e718a86bb6aecf07937b02b5d7e2dfc3afb130b0e34d5caaa2e5ca7454d3
4
- data.tar.gz: 6f5f7c405a4a5eb13dfc2caf6276bdde907a48b3226ad356efc2793768b2d304
3
+ metadata.gz: 4483586b922fcb40130de86a415fdf440dd46afa556dfa45e87e0d6d398f52d7
4
+ data.tar.gz: 88cbb6f82331655a9f78d49ee9b4013c2011bd94c3bb04831b6ebd58b4b968e5
5
5
  SHA512:
6
- metadata.gz: 02da529d99feab4932cd07da8426308dbecf93cc5f1cfb5465241b097cbc46207f93ff74bb85d50332de03dec950338897078f063ffed539b58fbb3a891b7fc5
7
- data.tar.gz: 3b4c687eb3f84e5f6c096ab101da99cec73c2064c218f8551d76c301f67edb707e82c58c5e06587c114b5ca8f34af4216977521f5d16ef2f315ceaaf82d4f8a7
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
 
@@ -36,7 +36,7 @@ module Zonesync
36
36
  response = http.get(nil)
37
37
  response["result"].reduce({}) do |map, attrs|
38
38
  map.merge attrs["id"] => Record.new(
39
- attrs["name"],
39
+ attrs["name"] + ".", # normalize to trailing period
40
40
  attrs["type"],
41
41
  attrs["ttl"].to_i,
42
42
  attrs["content"],
@@ -8,11 +8,19 @@ 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
+ end.sort
16
+ end
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")
15
22
  end
23
+ DNS::Zonefile.load(body)
16
24
  end
17
25
 
18
26
  def read record
@@ -25,6 +25,18 @@ module Zonesync
25
25
  rdata,
26
26
  )
27
27
  end
28
+
29
+ def <=> other
30
+ to_sortable <=> other.to_sortable
31
+ end
32
+
33
+ def to_sortable
34
+ [type, name, rdata, ttl]
35
+ end
36
+
37
+ def to_s
38
+ values.join(" ")
39
+ end
28
40
  end
29
41
  end
30
42
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zonesync
4
- VERSION = "0.1.1"
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.1
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