zonesync 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/exe/zonesync +3 -0
- data/lib/zonesync/cli.rb +29 -0
- data/lib/zonesync/http.rb +1 -0
- data/lib/zonesync/logger.rb +25 -0
- data/lib/zonesync/version.rb +1 -1
- data/lib/zonesync.rb +7 -5
- data/log/.keep +0 -0
- data/zonesync.gemspec +1 -0
- metadata +22 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58c4f6168ca0355c6aa7f0580ede2f8c080b04b44f196a24ecb827b38a3edda8
|
4
|
+
data.tar.gz: 9064bdd19540cc12d5cc48dfd93cbbb4a940c3e4cb4423255a0f66c9b282287a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
data/lib/zonesync/cli.rb
ADDED
@@ -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
@@ -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
|
data/lib/zonesync/version.rb
CHANGED
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:,
|
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
|
-
|
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
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.
|
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-
|
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:
|