Project

General

Profile

« Previous | Next » 

Revision 7d315254

Added by Ewoud Kohl van Wijngaarden over 6 years ago

Fixes #16913 - Add validation for the dhcp range

View differences:

manifests/pool.pp
String $mask,
Optional[String] $gateway = undef,
Variant[Array[String], Optional[String]] $pool_parameters = undef,
Variant[Array[String], Optional[String], Boolean] $range = undef,
Variant[Array[Dhcp::Range], Optional[Dhcp::Range], Enum[''], Boolean] $range = undef,
Optional[String] $failover = undef,
Variant[Array[String], Optional[String]] $options = undef,
Variant[Array[String], Optional[String]] $parameters = undef,
spec/aliases/range_spec.rb
require 'spec_helper'
describe 'test_module::range', type: :class do
describe 'valid handling' do
[
'192.0.2.100',
'192.0.2.100 192.0.2.200',
'1.1.1.1 255.255.255.255',
'dynamic-bootp 192.0.2.100 192.0.2.200',
].each do |value|
describe value.inspect do
let(:params) {{ value: value }}
it { is_expected.to compile }
end
end
end
describe 'invalid value handling' do
context 'garbage inputs' do
[
nil,
"all",
"all all",
"1 192.0.2.183",
"192.0.2.100 1",
].each do |value|
describe value.inspect do
let(:params) {{ value: value }}
it { is_expected.to compile.and_raise_error(/parameter 'value' expects a match for Dhcp::Range/) }
end
end
end
end
end
spec/defines/pool_spec.rb
let :params do {
:network => '10.0.0.0',
:mask => '255.255.255.0',
:range => '10.0.0.10 - 10.0.0.50',
:range => '10.0.0.10 10.0.0.50',
:failover => '10.1.1.20',
} end
......
' pool',
' {',
' failover peer "10.1.1.20";',
' range 10.0.0.10 - 10.0.0.50;',
' range 10.0.0.10 10.0.0.50;',
' }',
' option subnet-mask 255.255.255.0;',
'}',
......
let :params do {
:network => '10.0.0.0',
:mask => '255.255.255.0',
:range => ['10.0.0.10 - 10.0.0.50','10.0.0.100 - 10.0.0.150'],
:range => ['10.0.0.10 10.0.0.50','10.0.0.100 10.0.0.150'],
} end
it {
......
'subnet 10.0.0.0 netmask 255.255.255.0 {',
' pool',
' {',
' range 10.0.0.10 - 10.0.0.50;',
' range 10.0.0.100 - 10.0.0.150;',
' range 10.0.0.10 10.0.0.50;',
' range 10.0.0.100 10.0.0.150;',
' }',
' option subnet-mask 255.255.255.0;',
'}',
......
:network => '10.0.0.0',
:mask => '255.255.255.0',
:pool_parameters => 'allow members of "some-class"',
:range => '10.0.0.10 - 10.0.0.50',
:range => '10.0.0.10 10.0.0.50',
:gateway => '10.0.0.1',
:options => 'ntp-servers 10.0.0.2',
:parameters => 'max-lease-time 300',
......
" pool",
" {",
" allow members of \"some-class\";",
" range 10.0.0.10 - 10.0.0.50;",
" range 10.0.0.10 10.0.0.50;",
" }",
" option domain-name \"example.org\";",
" option subnet-mask 255.255.255.0;",
spec/static_fixtures/test_module/manifests/range.pp
# Class to test the dhcp::Range type
class test_module::range(
Dhcp::Range $value,
) {
notice('Success')
}
types/range.pp
type Dhcp::Range= Pattern[/^(dynamic-bootp )?((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d)))(\/((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))|[0-9]+))?( ((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d)))(\/((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))|[0-9]+))?)?$/]

Also available in: Unified diff