bind9mgr 0.2.4 → 0.2.6
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/History.txt +5 -1
- data/README.txt +20 -1
- data/lib/bind9mgr.rb +2 -2
- data/lib/named_conf.rb +16 -4
- data/lib/zone.rb +6 -30
- data/spec/named_conf_spec.rb +41 -0
- metadata +5 -5
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -1,12 +1,28 @@
|
|
1
1
|
= bind9mgr
|
2
2
|
|
3
|
+
https://github.com/madbox/bind9mgr
|
4
|
+
https://rubygems.org/gems/bind9mgr
|
5
|
+
|
3
6
|
== DESCRIPTION:
|
4
7
|
|
5
8
|
This gem contains some classes to manage bind9 zone files
|
6
9
|
|
7
10
|
== FEATURES/PROBLEMS:
|
8
11
|
|
9
|
-
|
12
|
+
Features:
|
13
|
+
* zone db file parseing
|
14
|
+
* named.conf simple parser
|
15
|
+
* OO data organization
|
16
|
+
* Simple verifications
|
17
|
+
* add zone intaeface
|
18
|
+
* delete zone interface
|
19
|
+
* automatic zone options management (origin, default NS, default A, "www" CNAME etc)
|
20
|
+
|
21
|
+
Please look into specs for more detailed info.
|
22
|
+
|
23
|
+
TODO: more configuration features
|
24
|
+
TODO: more conventions(feedback welcomed!)
|
25
|
+
TODO: xml mappings for restful APIs
|
10
26
|
|
11
27
|
== SYNOPSIS:
|
12
28
|
|
@@ -20,6 +36,9 @@ Please look into specs
|
|
20
36
|
bc.zones # => [ existing zones ... Bind9mgr::Zone ]
|
21
37
|
bc.zones.first.records # => [ records ... Bind9mgr::ResourceRecord ]
|
22
38
|
|
39
|
+
bc.add_zone('y_a_zone.org') # adds zone entry with default params
|
40
|
+
bc.write_all # rewrites named.conf.local and zone db files (in /etc/bind/zones_db.)
|
41
|
+
bc.del_zone!('y_a_zone.org') # immidiately removes db file and zone entry in named.conf.local
|
23
42
|
|
24
43
|
== REQUIREMENTS:
|
25
44
|
|
data/lib/bind9mgr.rb
CHANGED
@@ -6,9 +6,9 @@ require File.join( File.dirname(__FILE__), 'resource_record' )
|
|
6
6
|
require File.join( File.dirname(__FILE__), 'parser' )
|
7
7
|
|
8
8
|
module Bind9mgr
|
9
|
-
VERSION = '0.2.
|
9
|
+
VERSION = '0.2.6'
|
10
10
|
|
11
|
-
ZONES_BIND_SUBDIR = '
|
11
|
+
ZONES_BIND_SUBDIR = 'primary'
|
12
12
|
|
13
13
|
KLASSES = %w{IN CH}
|
14
14
|
ALLOWED_TYPES = %w{A CNAME MX TXT PTR NS SRV SOA}
|
data/lib/named_conf.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Bind9mgr
|
2
2
|
# You can specify bind_location. If you do so then .add_zone method
|
3
3
|
# will generate zones with right filenames.
|
4
|
+
# If .file
|
4
5
|
class NamedConf
|
5
6
|
# BIND_PATH = '/etc/bind'
|
6
7
|
# BIND_DB_PATH = BIND_PATH + '/master'
|
@@ -13,15 +14,26 @@ module Bind9mgr
|
|
13
14
|
@bind_location = File.dirname(file) if file.length > 1
|
14
15
|
load
|
15
16
|
end
|
16
|
-
|
17
|
+
|
18
|
+
def file= str
|
19
|
+
raise ArgumentError, "String expected" unless str.kind_of? String
|
20
|
+
@file = str
|
21
|
+
end
|
22
|
+
|
23
|
+
# Tries to load data from named conf. Raises exception if file missing.
|
24
|
+
def load!
|
25
|
+
init_zones
|
26
|
+
parse File.read( @file ) if file.length > 0
|
27
|
+
end
|
28
|
+
|
29
|
+
# Tries to load data from named conf. Do nothing if file missing.
|
17
30
|
def load
|
18
31
|
init_zones
|
19
|
-
parse File.read(
|
32
|
+
parse File.read( @file ) if File.exists?(@file)
|
20
33
|
end
|
21
34
|
|
22
35
|
def load_with_zones
|
23
|
-
|
24
|
-
parse File.read( File.join( @file )) if File.exists? file
|
36
|
+
load
|
25
37
|
zones.each{ |z| z.load}
|
26
38
|
end
|
27
39
|
|
data/lib/zone.rb
CHANGED
@@ -49,42 +49,18 @@ module Bind9mgr
|
|
49
49
|
|
50
50
|
def load
|
51
51
|
raise ArgumentError, "file not specified" unless @file
|
52
|
+
|
53
|
+
|
54
|
+
# TODO what should we do if there is no db file?
|
55
|
+
# raise ArgumentError, "File: #{file} not found." unless File.exists?( @file )
|
56
|
+
# just emulate parsing of empty file
|
57
|
+
return 0 unless File.exists?( @file )
|
52
58
|
|
53
59
|
p = Parser.new
|
54
60
|
p.result = self
|
55
|
-
raise ArgumentError, "File: #{file} not found." unless File.exists?( @file )
|
56
61
|
p.parse File.read( @file )
|
57
62
|
end
|
58
63
|
|
59
|
-
# def parse content
|
60
|
-
# clear_records
|
61
|
-
# content.gsub!(/^\s+\n/, '')
|
62
|
-
|
63
|
-
# # find and remove SOA record with its comments
|
64
|
-
# soa = /([^\s]*?)\s+?(\d+?)?\s*?(#{RRClasses.join('|')})\s*?(SOA)\s+(.*?\).*?)\n/m
|
65
|
-
# arr = content.match(soa).to_a
|
66
|
-
# arr.shift
|
67
|
-
# @records['SOA'].push arr
|
68
|
-
# content.sub! soa, ''
|
69
|
-
|
70
|
-
# # remove comments and blank lines
|
71
|
-
# content.gsub!(/;.*$/, '')
|
72
|
-
# content.gsub!(/^\s+\n/, '')
|
73
|
-
|
74
|
-
# # other @Records
|
75
|
-
# rr = /^([^\s]+)\s+?(\d+?)?\s*?(#{RRClasses.join('|')})?\s*?(#{RRTypes.join('|')})\s+(.*?)$/
|
76
|
-
# content.lines.each do |l|
|
77
|
-
# if md = l.match(/\$TTL\s+(\d+)/)
|
78
|
-
# ( @default_ttl = md[1].to_i ) if md[1].to_i > 0
|
79
|
-
# elsif md = l.match(rr)
|
80
|
-
# tmp_a = md.to_a
|
81
|
-
# tmp_a.shift
|
82
|
-
# @records[tmp_a[3]].push tmp_a
|
83
|
-
# end
|
84
|
-
# end
|
85
|
-
# @records
|
86
|
-
# end
|
87
|
-
|
88
64
|
def gen_db_content
|
89
65
|
initialized?
|
90
66
|
raise ArgumentError, "default_ttl not secified" unless @default_ttl
|
data/spec/named_conf_spec.rb
CHANGED
@@ -23,6 +23,18 @@ zone "cloud.ru" {
|
|
23
23
|
file "testdomain.com.db";
|
24
24
|
};
|
25
25
|
|
26
|
+
zone "1.168.192.in-addr.arpa" {
|
27
|
+
type master;
|
28
|
+
file "testdomain.com.db";
|
29
|
+
};
|
30
|
+
}
|
31
|
+
|
32
|
+
@test_wrong_conf_content = %q{// test file
|
33
|
+
zone "cloud.ru" {
|
34
|
+
type master;
|
35
|
+
file "there_is_no_such_file.com.db";
|
36
|
+
};
|
37
|
+
|
26
38
|
zone "1.168.192.in-addr.arpa" {
|
27
39
|
type master;
|
28
40
|
file "testdomain.com.db";
|
@@ -49,6 +61,7 @@ alias1 IN CNAME ns
|
|
49
61
|
File.stub(:exists?).with("testfile.conf").and_return(true)
|
50
62
|
File.stub(:exists?).with("testdomain.com.db").and_return(true)
|
51
63
|
|
64
|
+
File.stub(:read).with(anything()).and_raise(Errno::ENOENT.new("File.read stubbed. You trying to read unexpected file."))
|
52
65
|
File.stub(:read).with("testfile.conf").and_return(@test_conf_content)
|
53
66
|
File.stub(:read).with("testdomain.com.db").and_return(@test_db_content)
|
54
67
|
|
@@ -117,6 +130,14 @@ alias1 IN CNAME ns
|
|
117
130
|
@nc.zones.should be_empty()
|
118
131
|
end
|
119
132
|
|
133
|
+
it "should raise error if you try to assign non-String object to file" do
|
134
|
+
expect{ @nc.file = nil }.to raise_error(ArgumentError)
|
135
|
+
expect{ @nc.file = 1 }.to raise_error(ArgumentError)
|
136
|
+
expect{ @nc.file = '' }.not_to raise_error(ArgumentError)
|
137
|
+
expect{ @nc.file = 'qwe' }.not_to raise_error(ArgumentError)
|
138
|
+
end
|
139
|
+
|
140
|
+
|
120
141
|
it "should have an empty array of zones on instantiation without conf file" do
|
121
142
|
nc = Bind9mgr::NamedConf.new
|
122
143
|
nc.zones.should be_empty()
|
@@ -144,4 +165,24 @@ alias1 IN CNAME ns
|
|
144
165
|
pending "should automatically generate file name for zone db if not supplied"
|
145
166
|
pending "should automatically make dir for zone db files"
|
146
167
|
pending "should have methods to edit SOA values"
|
168
|
+
|
169
|
+
it "'load!' should raise error if named conf file is missing" do
|
170
|
+
@nc.file = "missing.file"
|
171
|
+
expect{ @nc.load! }.to raise_error
|
172
|
+
end
|
173
|
+
|
174
|
+
it "'load' should not raise error if named conf file is missing" do
|
175
|
+
@nc.file = "missing.file"
|
176
|
+
expect{ @nc.load }.not_to raise_error
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should not fail to load configuration when there is no zone db file" do
|
180
|
+
# named conf file with not existing zone db file
|
181
|
+
File.stub(:exists?).with("testwrongfile.conf").and_return(true)
|
182
|
+
File.stub(:read).with("testwrongfile.conf").and_return(@test_wrong_conf_content)
|
183
|
+
@nc.file = "testwrongfile.conf"
|
184
|
+
|
185
|
+
expect{ @nc.load }.not_to raise_error
|
186
|
+
expect{ @nc.load_with_zones }.not_to raise_error
|
187
|
+
end
|
147
188
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bind9mgr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-15 00:00:00.000000000 +04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hoe
|
17
|
-
requirement: &
|
17
|
+
requirement: &21035760 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: '2.12'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *21035760
|
26
26
|
description: This gem contains some classes to manage bind9 zone files
|
27
27
|
email:
|
28
28
|
- mikhail@mad-box.ru
|
@@ -52,7 +52,7 @@ files:
|
|
52
52
|
- spec/resource_record_spec.rb
|
53
53
|
- .gemtest
|
54
54
|
has_rdoc: true
|
55
|
-
homepage:
|
55
|
+
homepage: https://github.com/madbox/bind9mgr
|
56
56
|
licenses: []
|
57
57
|
post_install_message:
|
58
58
|
rdoc_options:
|