redzone 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedZone::Arpa do
4
+ let (:arpa_ipv4) {
5
+ described_class.new({
6
+ :name => '32.12.in-addr.arpa',
7
+ :network => '12.32.0.0/16',
8
+ :soa => 'mock_soa'
9
+ })
10
+ }
11
+ let (:arpa_ipv6) {
12
+ described_class.new(
13
+ :name => '9.8.7.6.4.3.2.1.1.0.0.2.ip6.arpa',
14
+ :network => '2001:1234:6789::/48',
15
+ :soa => 'mock_soa'
16
+ )
17
+ }
18
+ context "ipv4 network" do
19
+ subject { arpa_ipv4 }
20
+ its(:name) { should == '32.12.in-addr.arpa'}
21
+ its(:network) { should == IPAddr.new('12.32.0.0/16') }
22
+ its ("to_s") { should eq("") }
23
+
24
+ end
25
+ context "ipv6 network" do
26
+ subject { arpa_ipv6 }
27
+ its (:name) { should == '9.8.7.6.4.3.2.1.1.0.0.2.ip6.arpa' }
28
+ its (:network) { should == IPAddr.new('2001:1234:6789::/48') }
29
+ it { subject.to_s.should eq("") }
30
+ end
31
+ it 'should require name option' do
32
+ expect { described_class.new({:network => '12.32.0.0/16', :soa => 'soa'})}.to raise_error(ArgumentError,':name is required')
33
+ end
34
+ it 'should require network option' do
35
+ expect { described_class.new({:name => '32.12.in-addr.arpa', :soa => 'soa'})}.to raise_error(ArgumentError,':network is required')
36
+ end
37
+ it 'should require soa option' do
38
+ expect { described_class.new({:name => '32.12.in-addr.arpa', :network => '12.32.0.0/16' })}.to raise_error(ArgumentError,':soa is required')
39
+ end
40
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedZone::Record do
4
+ it 'should default to IN class' do
5
+ result = described_class.new({
6
+ :name => 'name',
7
+ :type => 'A',
8
+ :data => '10.1.0.1'
9
+ })
10
+ result.to_s.should == "name IN A 10.1.0.1 \n"
11
+ end
12
+ it 'should be commentable' do
13
+ result = described_class.new({
14
+ :name => 'name',
15
+ :type => 'A',
16
+ :data => '10.1.0.1',
17
+ :comment => 'Comment'
18
+ })
19
+ result.to_s.should == "name IN A 10.1.0.1 ; Comment\n"
20
+ end
21
+ it 'should have a TTL' do
22
+ result = described_class.new({
23
+ :name => 'name',
24
+ :type => 'A',
25
+ :data => '10.1.0.1',
26
+ :ttl => '1d'
27
+ })
28
+ result.to_s.should == "name 86400 IN A 10.1.0.1 \n"
29
+ end
30
+ it 'should quote TXT records' do
31
+ result = described_class.new({
32
+ :name => 'name',
33
+ :type => 'TXT',
34
+ :data => 'hello there'
35
+ })
36
+ result.to_s.should == "name IN TXT \"hello there\" \n"
37
+ end
38
+ it 'should collapse multi-line text records' do
39
+ result = described_class.new({
40
+ :name => 'name',
41
+ :type => 'TXT',
42
+ :data => <<-eos
43
+ Line1
44
+ Line2
45
+ Line3
46
+ Line4
47
+ eos
48
+ })
49
+ result.to_s.should == "name IN TXT \"Line1Line2Line3Line4\"\n"
50
+ end
51
+ it 'should require name option' do
52
+ expect { described_class.new({:type => "A", :data => 'b'})}.to raise_error(ArgumentError,':name is required')
53
+ end
54
+ it 'should require type option' do
55
+ expect { described_class.new({:name => "a", :data => 'b'})}.to raise_error(ArgumentError,':type is required')
56
+ end
57
+ it 'should require data option' do
58
+ expect { described_class.new({:name => "a", :type => 'A'})}.to raise_error(ArgumentError,':data is required')
59
+ end
60
+ end
data/zones.yml ADDED
@@ -0,0 +1,74 @@
1
+ ---
2
+ zones:
3
+ common:
4
+ hostmaster: hostmaster@redzone.com.
5
+ lifetimes:
6
+ refresh: 1H
7
+ retry: 15M
8
+ expire: 1W
9
+ negative: 1H
10
+ ttl: 1H
11
+ default: platinum
12
+ mailservers:
13
+ mx0:
14
+ priority: 10
15
+ machine: gold
16
+ mx1:
17
+ priority: 20
18
+ machine: silver
19
+ nameservers:
20
+ ns0: gold
21
+ ns1: silver
22
+ aliases:
23
+ www: platinum
24
+ cnames:
25
+ db: gold
26
+ backup: silver
27
+ search: www.google.com
28
+ wildcard: platinum
29
+ redzone.com:
30
+ arpa:
31
+ - name: '32.12.in-addr.arpa'
32
+ network: '12.32.0.0/16'
33
+ - name: '9.8.7.6.4.3.2.1.1.0.0.2.ip6.arpa'
34
+ network: '2001:1234:6789::/48'
35
+ machines:
36
+ platinum:
37
+ ipv4: 12.32.56.1
38
+ ipv6: 2001:1234:6789::1
39
+ gold:
40
+ ipv4: 12.32.56.2
41
+ ipv6: 2001:1234:6789::2
42
+ silver:
43
+ ipv4: 12.32.56.3
44
+ ipv6: 2001:1234:6789::3
45
+ records:
46
+ - name: '@'
47
+ type: TXT
48
+ ttl: 1W
49
+ data: '"v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.123 a -all"'
50
+ - name: dkim._domainkey
51
+ type: TXT
52
+ ttl: 12H
53
+ data: |
54
+ v=DKIM1; p=
55
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaK
56
+ txFUt0ec5+1dWmcDv0WH0qZLFK711sibNN5LutvnaiuH+w3Kr8Ylbw8gq2j0UBok
57
+ FcMycUvOBd7nsYn/TUrOua3Nns+qKSJBy88IWSh2zHaGbjRYujyWSTjlPELJ0H+5
58
+ EV711qseo/omquskkwIDAQAB
59
+ qa.redzone.com:
60
+ arpa:
61
+ - name: '1.168.192.in-addr.arpa'
62
+ network: '192.168.1.0/24'
63
+ - name: '0.0.0.0.0.0.0.0.0.0.c.f.ip6.arpa'
64
+ network: 'fc00::/48'
65
+ machines:
66
+ platinum:
67
+ ipv4: 192.168.1.1
68
+ ipv6: fc00::1:1
69
+ gold:
70
+ ipv4: 192.168.1.2
71
+ ipv6: fc00::1:2
72
+ silver:
73
+ ipv4: 192.168.1.3
74
+ ipv6: fc00::1:3
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redzone
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Justen Walker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: ! 'RedZone is a command-line too that can generate bind zone
56
+
57
+ files and configuration from yaml syntax.
58
+
59
+ '
60
+ email:
61
+ - justen.walker@gmail.com
62
+ executables:
63
+ - redzone
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - .gitignore
68
+ - Gemfile
69
+ - LICENSE.md
70
+ - README.md
71
+ - Rakefile
72
+ - bin/redzone
73
+ - lib/redzone.rb
74
+ - lib/redzone/arpa.rb
75
+ - lib/redzone/cli.rb
76
+ - lib/redzone/environment.rb
77
+ - lib/redzone/lifetime.rb
78
+ - lib/redzone/machine.rb
79
+ - lib/redzone/mail_exchange.rb
80
+ - lib/redzone/name_server.rb
81
+ - lib/redzone/record.rb
82
+ - lib/redzone/soa.rb
83
+ - lib/redzone/version.rb
84
+ - lib/redzone/zone.rb
85
+ - lib/redzone/zone_config.rb
86
+ - lib/redzone/zonefile_writer.rb
87
+ - redzone.gemspec
88
+ - redzone.rb
89
+ - spec/spec_helper.rb
90
+ - spec/unit/arpa_spec.rb
91
+ - spec/unit/record_spec.rb
92
+ - zones.yml
93
+ homepage: https://github.com/justenwalker/redzone
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: 1.8.7
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.2.0
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: RedZone - Automatically generate BIND zone files
117
+ test_files:
118
+ - spec/spec_helper.rb
119
+ - spec/unit/arpa_spec.rb
120
+ - spec/unit/record_spec.rb
121
+ has_rdoc: