diff --git a/README.md b/README.md index ffbd7cd51..bd0802230 100644 --- a/README.md +++ b/README.md @@ -413,6 +413,58 @@ Unacceptable input example: /usr2/username/bin:/usr/local/bin:/usr/bin:. ``` +#### `Stdlib::Fqdn` + +Matches paths on fully quallified domain name + +Acceptable input example: + +```shell +localhost + +example.com + +www.example.com +``` + +Unacceptable input example: + +```shell +'www www.example.com' + +2001:DB8::1 +``` + +#### `Stdlib::Host` + +Matches a valid host which could be a valid ipv4, ipv6 or fqdn + +Acceptable input example: + +```shell +localhost + +example.com + +www.example.com + +2001:0db8::1 + +192.0.2.1 +``` + +Unacceptable input example: + +```shell +'www www.example.com' + +2001:0d8 + +%.example.com + +bob@example.com +``` + ### Facts #### `package_provider` diff --git a/spec/type_aliases/fqdn_spec.rb b/spec/type_aliases/fqdn_spec.rb new file mode 100644 index 000000000..e50aab107 --- /dev/null +++ b/spec/type_aliases/fqdn_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +if Puppet::Util::Package.versioncmp(Puppet.version, '4.5.0') >= 0 + describe 'Stdlib::Fqdn' do + describe 'valid handling' do + %w[ + example + example.com + www.example.com + ].each do |value| + describe value.inspect do + it { is_expected.to allow_value(value) } + end + end + end + + describe 'invalid path handling' do + context 'garbage inputs' do + [ + [nil], + [nil, nil], + { 'foo' => 'bar' }, + {}, + '', + '2001:DB8::1', + 'www www.example.com', + ].each do |value| + describe value.inspect do + it { is_expected.not_to allow_value(value) } + end + end + end + end + end +end diff --git a/spec/type_aliases/host_spec.rb b/spec/type_aliases/host_spec.rb new file mode 100644 index 000000000..a85e0ee7c --- /dev/null +++ b/spec/type_aliases/host_spec.rb @@ -0,0 +1,44 @@ +require 'spec_helper' + +if Puppet::Util::Package.versioncmp(Puppet.version, '4.5.0') >= 0 + describe 'Stdlib::Host' do + describe 'valid handling' do + %w[ + example + example.com + www.example.com + 2001:0db8:85a3:0000:0000:8a2e:0370:7334 + fa76:8765:34ac:0823:ab76:eee9:0987:1111 + 2001:0db8::1 + 224.0.0.0 + 255.255.255.255 + 0.0.0.0 + 192.88.99.0 + ].each do |value| + describe value.inspect do + it { is_expected.to allow_value(value) } + end + end + end + + describe 'invalid handling' do + context 'garbage inputs' do + [ + [nil], + [nil, nil], + { 'foo' => 'bar' }, + {}, + '', + 'www www.example.com', + 'bob@example.com', + '%.example.com', + '2001:0d8', + ].each do |value| + describe value.inspect do + it { is_expected.not_to allow_value(value) } + end + end + end + end + end +end diff --git a/types/fqdn.pp b/types/fqdn.pp new file mode 100644 index 000000000..840ec5cec --- /dev/null +++ b/types/fqdn.pp @@ -0,0 +1 @@ +type Stdlib::Fqdn = Pattern[/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/] diff --git a/types/host.pp b/types/host.pp new file mode 100644 index 000000000..8f6919e70 --- /dev/null +++ b/types/host.pp @@ -0,0 +1 @@ +type Stdlib::Host = Variant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]