zonesync 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4483586b922fcb40130de86a415fdf440dd46afa556dfa45e87e0d6d398f52d7
4
- data.tar.gz: 88cbb6f82331655a9f78d49ee9b4013c2011bd94c3bb04831b6ebd58b4b968e5
3
+ metadata.gz: 58c4f6168ca0355c6aa7f0580ede2f8c080b04b44f196a24ecb827b38a3edda8
4
+ data.tar.gz: 9064bdd19540cc12d5cc48dfd93cbbb4a940c3e4cb4423255a0f66c9b282287a
5
5
  SHA512:
6
- metadata.gz: 8bdd45b0a0d43e91856f488a53f8880c3946f6ab566f9e13a54209a76b295ca76f3f6fb1e62e607594d0abea3963ddefd9576c593e804832bd2580e3b51e18fc
7
- data.tar.gz: d5afd17873627c461936dfd62038bd471fa7c83296981daca019ba9b2614c269cfa68b865d69a54dfd543c6b9a5d9c537bfe88c12cdca4885898b7db433bfa6a
6
+ metadata.gz: 3e06ff17f120b42693ca00fd27fcd3c56501bb01abb2b72c9dea149ef8173f3f3f02765767805b03210d6df1a40dee0c84f872d5f07f549ec7ccc95b9d250c6c
7
+ data.tar.gz: 8ddf71739ae861c356f27162484e9a1f006e841bbe8900471a1c098046db4287efae357df715b78f60154df7d54e03247892726e8156f68ba8400560951c2147
data/README.md CHANGED
@@ -72,6 +72,17 @@ aws_secret_access_key: <AWS_SECRET_ACCESS_KEY>
72
72
 
73
73
  ### Usage
74
74
 
75
+ #### CLI
76
+
77
+ ```
78
+ $ bundle exec zonesync
79
+ ```
80
+ ```
81
+ $ bundle exec zonesync --dry-run # log to STDOUT but don't actually perform the sync
82
+ ```
83
+
84
+ #### Ruby
85
+
75
86
  Assuming your zone file lives in `hostfile.txt` and your DNS provider credentials are configured in `provider.yml`:
76
87
 
77
88
  ```ruby
data/exe/zonesync ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative "../lib/zonesync"
3
+ Zonesync::CLI.start ARGV
@@ -0,0 +1,29 @@
1
+ require "thor"
2
+
3
+ module Zonesync
4
+ class CLI < Thor
5
+ def self.exit_on_failure?
6
+ true
7
+ end
8
+
9
+ default_command :sync
10
+ desc "sync", "syncs the contents of Zonefile to the DNS server configured in Rails.application.credentials.zonesync"
11
+ method_option :dry_run, type: :boolean, default: false, aliases: :n, desc: "log operations to STDOUT but don't perform the sync"
12
+ def sync
13
+ Zonesync.call credentials: default_credentials, dry_run: options[:dry_run]
14
+ end
15
+
16
+ private
17
+
18
+ def default_credentials
19
+ if defined?(Rails.application.credentials)
20
+ Rails.application.credentials.zonesync
21
+ else
22
+ require "active_support/encrypted_configuration"
23
+ require "active_support/core_ext/hash/keys"
24
+ credentials = ActiveSupport::EncryptedConfiguration.new(config_path: "config/credentials.yml.enc", key_path: "config/master.key", raise_if_missing_key: true, env_key: "RAILS_MASTER_KEY")
25
+ credentials.zonesync
26
+ end
27
+ end
28
+ end
29
+ end
data/lib/zonesync/http.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "net/http"
2
+ require "json"
2
3
 
3
4
  module Zonesync
4
5
  class HTTP < Struct.new(:base)
@@ -0,0 +1,25 @@
1
+ require "logger"
2
+ require "fileutils"
3
+
4
+ class Logger
5
+ def self.log method, args, dry_run: false
6
+ loggers = [::Logger.new(STDOUT)]
7
+
8
+ if !dry_run
9
+ FileUtils.mkdir_p("log")
10
+ loggers << ::Logger.new("log/zonesync.log")
11
+ end
12
+
13
+ loggers.each do |logger|
14
+ operation = case args
15
+ when Array
16
+ args.map { |h| h.values.join(" ") }.join(" -> ")
17
+ when Hash
18
+ args.values.join(" ")
19
+ else
20
+ raise args.inspect
21
+ end
22
+ logger.info "Zonesync: #{method.capitalize} #{operation}"
23
+ end
24
+ end
25
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zonesync
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/zonesync.rb CHANGED
@@ -1,19 +1,21 @@
1
1
  require "zonesync/provider"
2
2
  require "zonesync/diff"
3
+ require "zonesync/logger"
4
+ require "zonesync/cli"
3
5
 
4
6
  module Zonesync
5
- def self.call zonefile:, credentials:
6
- Sync.new({ provider: "Filesystem", path: zonefile }, credentials).call
7
+ def self.call zonefile: "Zonefile", credentials:, dry_run: false
8
+ Sync.new({ provider: "Filesystem", path: zonefile }, credentials).call(dry_run: dry_run)
7
9
  end
8
10
 
9
11
  class Sync < Struct.new(:source, :destination)
10
- def call
12
+ def call dry_run: false
11
13
  source = Provider.from(self.source)
12
14
  destination = Provider.from(self.destination)
13
15
  operations = Diff.call(from: destination, to: source)
14
16
  operations.each do |method, args|
15
- puts [method, args].inspect
16
- destination.send(method, args)
17
+ Logger.log(method, args, dry_run: dry_run)
18
+ destination.send(method, args) unless dry_run
17
19
  end
18
20
  end
19
21
  end
data/log/.keep ADDED
File without changes
data/zonesync.gemspec CHANGED
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_dependency "dns-zonefile", "~>1.0"
31
31
  spec.add_dependency "diff-lcs", "~>1.4"
32
+ spec.add_dependency "thor", "~>1.0"
32
33
 
33
34
  spec.add_development_dependency "rake"
34
35
  spec.add_development_dependency "rspec"
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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-01-28 00:00:00.000000000 Z
12
+ date: 2024-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dns-zonefile
@@ -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: thor
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.0'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: rake
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -85,7 +99,8 @@ description: Sync your Zone file with your DNS host
85
99
  email:
86
100
  - micah@botandrose.com
87
101
  - git@james.ottaway.io
88
- executables: []
102
+ executables:
103
+ - zonesync
89
104
  extensions: []
90
105
  extra_rdoc_files: []
91
106
  files:
@@ -95,13 +110,17 @@ files:
95
110
  - LICENSE.txt
96
111
  - README.md
97
112
  - Rakefile
113
+ - exe/zonesync
98
114
  - lib/zonesync.rb
115
+ - lib/zonesync/cli.rb
99
116
  - lib/zonesync/cloudflare.rb
100
117
  - lib/zonesync/diff.rb
101
118
  - lib/zonesync/http.rb
119
+ - lib/zonesync/logger.rb
102
120
  - lib/zonesync/provider.rb
103
121
  - lib/zonesync/record.rb
104
122
  - lib/zonesync/version.rb
123
+ - log/.keep
105
124
  - zonesync.gemspec
106
125
  homepage: https://github.com/botandrose/zonesync
107
126
  licenses: