palletjack-tools 0.1.2 → 0.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1698a81a8f10fd0ae9b078c077a157d62185388d
4
- data.tar.gz: 8e00cb7db1fe2051f3ebe34e015f7285dff5cc07
3
+ metadata.gz: 443662d2e6f9f483d2de9d2305340e50656ae500
4
+ data.tar.gz: ffa79a21b570f12fdbb1f5ff4ff4c494f44cde4e
5
5
  SHA512:
6
- metadata.gz: 41a4e3b367d5f38d5b9514df1e6f8e01571046d46cd5d70ab38f1a4913c44fd9930986af3a4e72b1b9a9978b542a58e26cbe96947c2b39dd15b13505685fd17b
7
- data.tar.gz: 1993440970282599886f25403198dc39c86e8f3128451f6a8d63dbef26f2b71b0e5be1b49051f3372ca09490b0dfbaccf72b49669cfbebafea1eda42d628197f
6
+ metadata.gz: 97879673f71ef8f1f2ec8f643988a7145e0ec508675aa72d62c77b2756ad0cc1204355d88492d90c451034fe6209db1a6b6be890aab18e22788e2bbe707c0173
7
+ data.tar.gz: ad68602d2ff0ba2cc16ed4c319db333e01abbb7003df90d313d20022618c8930ca536a51b0a55dcef670b1559124616b8299180687eaa78542ba11b7379ecc7d
@@ -15,8 +15,76 @@
15
15
 
16
16
  require 'palletjack/tool'
17
17
  require 'ip'
18
+ require 'resolv'
18
19
 
19
20
  class PalletJack2Unbound < PalletJack::Tool
21
+
22
+ # Representation of a stub zone configuration for Unbound
23
+
24
+ class StubZone
25
+
26
+ # :call-seq:
27
+ # new(TOOL, ZONE, AUTH-NS, ...)
28
+ # new(TOOL, ZONE, AUTH-NS, ..., transparent: true)
29
+ #
30
+ # If the +transparent+ option is true, it represents
31
+ # a <tt>local-zone ... transparent</tt>, declaration to
32
+ # override the builtin RFC1918 blocking in unbound.
33
+
34
+ def initialize(zone, *stub_addrs, transparent: false)
35
+ raise ArgumentError.new if stub_addrs.empty?
36
+
37
+ @tool = PalletJack2Unbound.instance
38
+ @zone = zone
39
+ @stub_addrs = stub_addrs
40
+ @transparent = transparent
41
+ end
42
+
43
+ # Write a stub-zone declaration to a file in conf.d/
44
+
45
+ def output
46
+ @tool.config_file :conf_dir, "#{@zone}.conf" do |stubfile|
47
+ stubfile << @tool.git_header('palletjack2unbound')
48
+ stubfile << "
49
+ stub-zone:
50
+ name: #{@zone}\n"
51
+
52
+ @stub_addrs.each do |addr|
53
+ stubfile << " stub-addr: #{addr}\n"
54
+ end
55
+
56
+ if @transparent then
57
+ stubfile << "\nserver:\n local-zone: \"#{@zone}\" transparent\n"
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ # Representation of a service wide configuration for Unbound
64
+
65
+ class UnboundConfig
66
+ def initialize(service_name)
67
+ @tool = PalletJack2Unbound.instance
68
+ @service_name = service_name
69
+ @service_config = @tool.jack.fetch(kind:'service', name: @service_name)
70
+ end
71
+
72
+ # Generate unbound service configuration
73
+
74
+ def output
75
+ @tool.config_file :local_dir, "#{@service_name}.conf" do |configfile|
76
+ configfile << @tool.git_header('palletjack2unbound')
77
+ @service_config["service.unbound.server"].each do |config|
78
+ config.each do |key, value|
79
+ configfile << "#{key}: #{value}\n"
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ # Setup command line options parser
87
+
20
88
  def parse_options(opts)
21
89
  opts.banner =
22
90
  "Usage: #{$PROGRAM_NAME} -w <warehouse> -s <service> -o <output directory>
@@ -42,30 +110,6 @@ E.g.
42
110
  required_option :service
43
111
  end
44
112
 
45
- # Write a stub-zone declaration to a file in conf.d/
46
- # If the +transparent+ option is true, also write
47
- # a local-zone ... transparent, declaration e.g. to
48
- # override the builtin RFC1918 blocking in unbound.
49
-
50
- def stub_zone(zone, stub_addrs, transparent: false)
51
- return if stub_addrs.empty?
52
-
53
- config_file :conf_dir, "#{zone}.conf" do |stubfile|
54
- stubfile << git_header('palletjack2unbound')
55
- stubfile << "
56
- stub-zone:
57
- name: #{zone}\n"
58
-
59
- stub_addrs.each do |addr|
60
- stubfile << " stub-addr: #{addr}\n"
61
- end
62
-
63
- if transparent then
64
- stubfile << "\nserver:\n local-zone: \"#{zone}\" transparent\n"
65
- end
66
- end
67
- end
68
-
69
113
  # Check if +ip+ belongs to some RFC1918 network
70
114
 
71
115
  def rfc1918?(ip)
@@ -75,55 +119,72 @@ stub-zone:
75
119
  rfc1918_nets.any? {|net| ip.is_in?(net)}
76
120
  end
77
121
 
78
- # Generate unbound service configuration
122
+ # Processing stage for stub zones
123
+
124
+ def process_stub_zones
125
+ @stub_zones = []
126
+
127
+ jack.each(kind:'domain') do |domain|
128
+ zone = domain['net.dns.domain']
129
+ stub_addrs = []
79
130
 
80
- def unbound_config(service_name)
81
- service_config = jack.fetch(kind:'service', name: service_name)
131
+ domain['net.dns.ns'].each do |ns|
132
+ nsname = Resolv::DNS::Name.create(ns)
133
+ nsname =
134
+ Resolv::DNS::Name.create("#{ns}.#{zone}.") unless nsname.absolute?
82
135
 
83
- config_file :local_dir, "#{service_name}.conf" do |configfile|
84
- configfile << git_header('palletjack2unbound')
85
- service_config["service.unbound.server"].each do |config|
86
- config.each do |key, value|
87
- configfile << "#{key}: #{value}\n"
136
+ jack.each(kind:'ipv4_interface',
137
+ all?:{'net.dns.fqdn' => nsname.to_s}) do |ipv4|
138
+ stub_addrs << ipv4['net.ipv4.address']
88
139
  end
89
140
  end
90
- end
91
- end
92
- end
93
141
 
94
- PalletJack2Unbound.run do
95
- config_dir :conf_dir
96
- config_dir :local_dir
142
+ @stub_zones << StubZone.new(zone, *stub_addrs)
97
143
 
98
- jack.each(kind:'domain') do |domain|
99
- zone = domain['net.dns.domain']
100
- stub_addrs = []
144
+ next unless domain['net.ipv4.cidr']
101
145
 
102
- domain['net.dns.ns'].each do |ns|
103
- jack.each(kind:'ipv4_interface', all?:{'net.dns.fqdn' => ns}) do |ipv4|
104
- stub_addrs << ipv4['net.ipv4.address']
105
- end
146
+ # Assume all delegations happen on octet boundaries for now.
147
+ # TODO: RFC 2317 classless in-addr.arpa delegation
148
+
149
+ ip_net = IP.new(domain['net.ipv4.cidr'])
150
+ reverse_zone = ip_net.to_arpa
151
+ prefix_octets, _ = domain['net.ipv4.prefixlen'].to_i.divmod(8)
152
+ reverse_zone =
153
+ ip_net.to_arpa.split('.')[-(2 + prefix_octets) .. 5].join('.')
154
+
155
+ # Make the same assumption that palletjack2knot does;
156
+ # reverse delegations are made to the same nameserver
157
+ # as forward delegations.
158
+
159
+ @stub_zones << StubZone.new(reverse_zone, *stub_addrs,
160
+ transparent: rfc1918?(ip_net))
106
161
  end
162
+ end
163
+
164
+ # Processing stage for global service configuration
107
165
 
108
- stub_zone(zone, stub_addrs)
166
+ def process_service_config
167
+ @unbound_config = UnboundConfig.new(options[:service])
168
+ end
109
169
 
110
- next unless domain['net.ipv4.cidr']
170
+ # Main processing stage
111
171
 
112
- # Assume all delegations happen on octet boundaries for now.
113
- # TODO: RFC 2317 classless in-addr.arpa delegation
172
+ def process
173
+ process_stub_zones
174
+ process_service_config
175
+ end
114
176
 
115
- ip_net = IP.new(domain['net.ipv4.cidr'])
116
- reverse_zone = ip_net.to_arpa
117
- prefix_octets, _ = domain['net.ipv4.prefixlen'].to_i.divmod(8)
118
- reverse_zone =
119
- ip_net.to_arpa.split('.')[-(2 + prefix_octets) .. 5].join('.')
177
+ # Config file output stage
120
178
 
121
- # Make the same assumption that palletjack2knot does;
122
- # reverse delegations are made to the same nameserver
123
- # as forward delegations.
179
+ def output
180
+ config_dir :conf_dir
181
+ config_dir :local_dir
124
182
 
125
- stub_zone(reverse_zone, stub_addrs, transparent: rfc1918?(ip_net))
183
+ @stub_zones.each {|stub_zone| stub_zone.output }
184
+ @unbound_config.output
126
185
  end
186
+ end
127
187
 
128
- unbound_config(options[:service])
188
+ if PalletJack2Unbound.standalone?(__FILE__)
189
+ PalletJack2Unbound.run
129
190
  end
metadata CHANGED
@@ -1,37 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: palletjack-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl-Johan Karlsson
8
8
  autorequire:
9
9
  bindir: exe
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRYwFAYDVQQDDA1jYWxs
14
- ZS5lbmdsdW5kMRkwFwYKCZImiZPyLGQBGRYJc2FhYmdyb3VwMRMwEQYKCZImiZPy
15
- LGQBGRYDY29tMB4XDTE2MTEwMjA5MjYyN1oXDTE3MTEwMjA5MjYyN1owSDEWMBQG
16
- A1UEAwwNY2FsbGUuZW5nbHVuZDEZMBcGCgmSJomT8ixkARkWCXNhYWJncm91cDET
17
- MBEGCgmSJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBAM7OxaztzD0LyOwK1mPcg3BhioX1EDVbD/qAFOAzBSGGlAhtmHMqAkyvJMvs
19
- iiG7xvBidWUapxiEiBwamXiOTSrp2eW+XSXW9omdWHXjBZcwHqwb1VmAlYRDkSHf
20
- dzcM/z4xlV+DJw/pFyMRWzqNdVBtWTbVXAFGjJSqQ6q21ACYJldV9U71AIpXo+oF
21
- VEMf6PZS2uhB1G+FgAtnX/xmy7OM1Cy3qc/CaJbWSddpegxWJMUn2HNQxFwIe40g
22
- WoEoiFA7qQg9DnR/5i3lW6QyfIaA5k9cv2su1VyjqKLbkFTTTjYw0P1BJmvfXjtc
23
- rMl+3HCWYj6UunZwfZi2wDGsBkkCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
- DwQEAwIEsDAdBgNVHQ4EFgQUwHCMEKgrIMaiTkTVLKZn6yOD1SIwJgYDVR0RBB8w
25
- HYEbY2FsbGUuZW5nbHVuZEBzYWFiZ3JvdXAuY29tMCYGA1UdEgQfMB2BG2NhbGxl
26
- LmVuZ2x1bmRAc2FhYmdyb3VwLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAP9OnE0jP
27
- 2vRHI/vnOkgCvLFNoOqK/YB4yDVVW69Pza+xIXcmUBvl7DQ+bBdF5AK0B1A7U0rp
28
- Pbdj0bpQtWxmUmMIbnE1w6iuVCXAabsyUfHY4mlztToWXMVOXc1SPlJ/S2XXaRd5
29
- fiNj/nBTb0YTQA0E4pZ0Aud80qZ2WLdc6FfzHUEMW91BL3bhLeDL40noHK5Lvk52
30
- phzVHIrDjCowUMTnGiPZCXEo4KZW76KwYYV6oQ6LzcrYBw5mJ4XpdgQKZgnTnRBP
31
- f8wtQllq82VF0AXUYeLtTh1f+DW3WW5BO1e2OCu5eOV7dbyaVPaNK/+rHjCN8kM/
32
- DGZSwUoNADmVkQ==
33
- -----END CERTIFICATE-----
34
- date: 2016-11-02 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2016-11-10 00:00:00.000000000 Z
35
12
  dependencies:
36
13
  - !ruby/object:Gem::Dependency
37
14
  name: palletjack
@@ -39,14 +16,14 @@ dependencies:
39
16
  requirements:
40
17
  - - '='
41
18
  - !ruby/object:Gem::Version
42
- version: 0.1.2
19
+ version: 0.1.3
43
20
  type: :runtime
44
21
  prerelease: false
45
22
  version_requirements: !ruby/object:Gem::Requirement
46
23
  requirements:
47
24
  - - '='
48
25
  - !ruby/object:Gem::Version
49
- version: 0.1.2
26
+ version: 0.1.3
50
27
  - !ruby/object:Gem::Dependency
51
28
  name: dns-zone
52
29
  requirement: !ruby/object:Gem::Requirement
@@ -193,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
170
  version: '0'
194
171
  requirements: []
195
172
  rubyforge_project:
196
- rubygems_version: 2.0.14
173
+ rubygems_version: 2.4.8
197
174
  signing_key:
198
175
  specification_version: 4
199
176
  summary: Tools for the Pallet Jack Lightweight Configuration Management Database
checksums.yaml.gz.sig DELETED
Binary file
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
@@ -1,3 +0,0 @@
1
- �.��۩'1����:�򙘹TF��TX̉�]]��ZY��bWـ�R}Jo{���$S1cǹ�%�M��W���� ��_����S���wE�ѣl �8!$ҩ��?]s�0=���c�Ud�ς�!;
2
- ��L���;|�Y�9jq�
3
- �V��h��5����s��Yw�ZEʰ�o~n�V~�N��v����!�T?XO5忊j��$R�O���AT�3��W<�lѯ*J=֥��vcg78F��A�3�,Q ��ڌn�