dnsomatic 0.1.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|