dnsomatic 0.1.1 → 0.2.2
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.
- data/bin/dnsomatic +30 -28
- data/lib/dnsomatic.rb +1 -1
- data/lib/dnsomatic/iplookup.rb +10 -5
- data/lib/dnsomatic/logger.rb +5 -4
- data/lib/dnsomatic/opts.rb +6 -3
- data/tests/test_opts.rb +0 -1
- data/tests/test_updater.rb +1 -0
- metadata +2 -2
data/bin/dnsomatic
CHANGED
@@ -3,51 +3,53 @@
|
|
3
3
|
begin
|
4
4
|
require 'dnsomatic'
|
5
5
|
rescue LoadError => e
|
6
|
-
# a small hack in the case
|
6
|
+
# a small hack in the case we aren't a gem
|
7
7
|
$: << File.join(File.dirname($0), '..', 'lib')
|
8
8
|
retry
|
9
9
|
end
|
10
10
|
|
11
11
|
begin
|
12
|
-
|
13
|
-
|
12
|
+
opts = DNSOMatic::Opts.instance
|
13
|
+
opts.parse(ARGV)
|
14
14
|
|
15
|
-
c = DNSOMatic::Config.new(
|
15
|
+
c = DNSOMatic::Config.new(opts.cf)
|
16
16
|
|
17
|
-
if
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
if opts.showcf
|
18
|
+
msg = "This is your configuration after merging in the defaults.\n"
|
19
|
+
msg += "It has been pruned to only display the stanza named: #{opts.name}" if opts.name
|
20
|
+
msg += c.merged_config(opts.name)
|
21
|
+
DNSOMatic::Logger.log(msg)
|
21
22
|
exit
|
22
23
|
end
|
23
24
|
|
24
|
-
|
25
|
-
$stdout.puts "Will only update #{$opts.name}."
|
26
|
-
end
|
25
|
+
DNSOMatic::Logger.log("Will only update #{opts.name}.") if opts.stanza
|
27
26
|
|
28
|
-
updaters = c.updaters(
|
27
|
+
updaters = c.updaters(opts.name)
|
29
28
|
|
30
29
|
updaters.each_pair do |name, obj|
|
31
|
-
|
32
|
-
if
|
33
|
-
|
30
|
+
DNSOMatic::Logger.log("Working with host update definition: #{name}")
|
31
|
+
if opts.print
|
32
|
+
DNSOMatic::Logger.warn(obj.to_s)
|
34
33
|
else
|
35
|
-
obj.send(
|
34
|
+
obj.send( opts.force ? 'update!' : 'update')
|
36
35
|
end
|
37
36
|
end
|
38
|
-
rescue DNSOMatic::Error => e
|
39
|
-
$stderr.puts e
|
40
|
-
if $opts.debug
|
41
|
-
$stderr.puts "Backtrace:"
|
42
|
-
$stderr.puts e.backtrace
|
43
|
-
end
|
44
37
|
rescue => e
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
38
|
+
if e.kind_of?(DNSOMatic::Error)
|
39
|
+
msg = e
|
40
|
+
else
|
41
|
+
msg = "Rescued an unhandled exception of type: #{e.class}\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
msg += "The exception contains the following message:\n"
|
45
|
+
msg += e.message
|
46
|
+
|
47
|
+
if opts.debug
|
48
|
+
msg += "Backtrace:\n"
|
49
|
+
msg += e.backtrace.to_s
|
50
|
+
else
|
51
|
+
msg += "If you want to see where this error was generated, use -x"
|
51
52
|
end
|
53
|
+
DNSOMatic::Logger.warn(msg)
|
52
54
|
exit 1
|
53
55
|
end
|
data/lib/dnsomatic.rb
CHANGED
@@ -106,7 +106,7 @@ require 'open-uri'
|
|
106
106
|
# -h, --help Display this help text
|
107
107
|
|
108
108
|
module DNSOMatic
|
109
|
-
VERSION = '0.
|
109
|
+
VERSION = '0.2.2'
|
110
110
|
USERAGENT = "Ruby_DNS-o-Matic/#{VERSION}"
|
111
111
|
|
112
112
|
# We provide our easily distinguishable exception class so that we can easily
|
data/lib/dnsomatic/iplookup.rb
CHANGED
@@ -11,6 +11,7 @@ module DNSOMatic
|
|
11
11
|
UNCHANGED = false
|
12
12
|
|
13
13
|
attr_reader :ip
|
14
|
+
@@opts = Opts.instance
|
14
15
|
|
15
16
|
# A URL must be provided that returns the IP of the system that requests
|
16
17
|
# the URL. A commonly used example is http://www.whatismyip.org
|
@@ -52,8 +53,8 @@ module DNSOMatic
|
|
52
53
|
|
53
54
|
private
|
54
55
|
def min_elapsed?
|
55
|
-
if Time.now - @last_update <=
|
56
|
-
Logger::log("Minimum lookup interval not expired.")
|
56
|
+
if Time.now - @last_update <= @@opts.minimum
|
57
|
+
Logger::log("Minimum lookup interval (#{@@opts.minimum}s) not expired.")
|
57
58
|
true
|
58
59
|
else
|
59
60
|
false
|
@@ -61,8 +62,8 @@ module DNSOMatic
|
|
61
62
|
end
|
62
63
|
|
63
64
|
def max_elapsed?
|
64
|
-
if Time.now - @last_update >=
|
65
|
-
Logger::log("Maximum interval
|
65
|
+
if Time.now - @last_update >= @@opts.maximum
|
66
|
+
Logger::log("Maximum update interval (#{@@opts.maximum}s) has elapsed. Update will be forced.")
|
66
67
|
true
|
67
68
|
else
|
68
69
|
false
|
@@ -122,7 +123,11 @@ module DNSOMatic
|
|
122
123
|
#because an access for a key that doesn't exist returns and inserts
|
123
124
|
#a new IPStatus object, we don't differntiate between seen and unseen
|
124
125
|
#here.
|
125
|
-
|
126
|
+
if @cache[url]
|
127
|
+
@cache[url].update
|
128
|
+
else
|
129
|
+
@cache[url] = IPStatus.new(url)
|
130
|
+
end
|
126
131
|
|
127
132
|
save() #ensure that we get spooled to disk.
|
128
133
|
@cache[url]
|
data/lib/dnsomatic/logger.rb
CHANGED
@@ -2,20 +2,21 @@ module DNSOMatic
|
|
2
2
|
# A simple class to provide consistent logging throughout the various other
|
3
3
|
# classes. All methods are class methods, so no instance is required.
|
4
4
|
class Logger
|
5
|
+
@@opts = Opts.instance
|
5
6
|
# Output a message to stdout if the user specified the verbose command
|
6
7
|
# line option.
|
7
8
|
def self.log(msg)
|
8
|
-
$stdout.puts msg if
|
9
|
+
$stdout.puts msg if @@opts.verbose
|
9
10
|
end
|
10
11
|
|
11
|
-
# Output a message to
|
12
|
+
# Output a message to regardless of verbose command line option.
|
12
13
|
def self.warn(msg)
|
13
|
-
$
|
14
|
+
$stdout.puts msg
|
14
15
|
end
|
15
16
|
|
16
17
|
# Output a message to stdout if either verbose or alert was specified.
|
17
18
|
def self.alert(msg)
|
18
|
-
$stdout.puts msg if
|
19
|
+
$stdout.puts msg if @@opts.verbose or @@opts.alert
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
data/lib/dnsomatic/opts.rb
CHANGED
@@ -62,15 +62,18 @@ module DNSOMatic
|
|
62
62
|
end
|
63
63
|
|
64
64
|
o.on('-V', '--version', 'Display version and exit') do
|
65
|
-
|
66
|
-
exit
|
65
|
+
DNSOMatic::Logger.warn(DNSOMatic::VERSION)
|
66
|
+
exit
|
67
67
|
end
|
68
68
|
|
69
69
|
o.on('-x', '--debug', 'Output additional info in error situations') do
|
70
70
|
@@opts.debug = true
|
71
71
|
end
|
72
72
|
|
73
|
-
o.on('-h', '--help', 'Display this help text')
|
73
|
+
o.on('-h', '--help', 'Display this help text') do
|
74
|
+
DNSOMatic::Logger.warn(o)
|
75
|
+
exit
|
76
|
+
end
|
74
77
|
end
|
75
78
|
opts.parse!(args)
|
76
79
|
|
data/tests/test_opts.rb
CHANGED
data/tests/test_updater.rb
CHANGED
@@ -9,6 +9,7 @@ require 'dnsomatic'
|
|
9
9
|
class TestUpdater < Test::Unit::TestCase
|
10
10
|
def setup
|
11
11
|
$opts = DNSOMatic::Opts.instance
|
12
|
+
$opts.parse([]) #just to override any values setup by previous tests
|
12
13
|
$fp = File.join('/tmp', 'dnsomatic.testcache-' + Process.pid.to_s)
|
13
14
|
$iplookup = DNSOMatic::IPLookup.instance
|
14
15
|
$iplookup.setcachefile($fp)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dnsomatic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Walton
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-08-
|
12
|
+
date: 2008-08-27 00:00:00 -04:00
|
13
13
|
default_executable: dnsomatic
|
14
14
|
dependencies: []
|
15
15
|
|