puppetmodule-netdev_stdlib 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +27 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/Guardfile +15 -0
- data/LICENSE +202 -0
- data/Modulefile +9 -0
- data/README.md +330 -0
- data/Rakefile +1 -0
- data/lib/netdev_stdlib.rb +4 -0
- data/lib/netdev_stdlib/version.rb +3 -0
- data/lib/puppet/type/domain_name.rb +17 -0
- data/lib/puppet/type/name_server.rb +17 -0
- data/lib/puppet/type/network_interface.rb +60 -0
- data/lib/puppet/type/network_trunk.rb +83 -0
- data/lib/puppet/type/network_vlan.rb +53 -0
- data/lib/puppet/type/ntp_config.rb +25 -0
- data/lib/puppet/type/ntp_server.rb +20 -0
- data/lib/puppet/type/port_channel.rb +82 -0
- data/lib/puppet/type/radius.rb +20 -0
- data/lib/puppet/type/radius_global.rb +40 -0
- data/lib/puppet/type/radius_server.rb +95 -0
- data/lib/puppet/type/radius_server_group.rb +25 -0
- data/lib/puppet/type/search_domain.rb +17 -0
- data/lib/puppet/type/snmp_community.rb +29 -0
- data/lib/puppet/type/snmp_contact.rb +17 -0
- data/lib/puppet/type/snmp_location.rb +17 -0
- data/lib/puppet/type/snmp_notification.rb +20 -0
- data/lib/puppet/type/snmp_notification_receiver.rb +77 -0
- data/lib/puppet/type/snmp_protocol.rb +20 -0
- data/lib/puppet/type/snmp_user.rb +77 -0
- data/lib/puppet/type/syslog_server.rb +42 -0
- data/lib/puppet/type/syslog_settings.rb +25 -0
- data/lib/puppet/type/tacacs.rb +20 -0
- data/lib/puppet/type/tacacs_global.rb +40 -0
- data/lib/puppet/type/tacacs_server.rb +50 -0
- data/lib/puppet/type/tacacs_server_group.rb +25 -0
- data/netdev_stdlib.gemspec +36 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/shared_examples_for_types.rb +412 -0
- data/spec/unit/puppet/type/domain_name_spec.rb +8 -0
- data/spec/unit/puppet/type/name_server_spec.rb +8 -0
- data/spec/unit/puppet/type/network_interface_spec.rb +44 -0
- data/spec/unit/puppet/type/network_trunk_spec.rb +55 -0
- data/spec/unit/puppet/type/network_vlan_spec.rb +57 -0
- data/spec/unit/puppet/type/ntp_config_spec.rb +8 -0
- data/spec/unit/puppet/type/ntp_server_spec.rb +8 -0
- data/spec/unit/puppet/type/port_channel_spec.rb +87 -0
- data/spec/unit/puppet/type/radius_global_spec.rb +27 -0
- data/spec/unit/puppet/type/radius_server_group_spec.rb +12 -0
- data/spec/unit/puppet/type/radius_server_spec.rb +51 -0
- data/spec/unit/puppet/type/radius_spec.rb +8 -0
- data/spec/unit/puppet/type/search_domain_spec.rb +8 -0
- data/spec/unit/puppet/type/snmp_community_spec.rb +27 -0
- data/spec/unit/puppet/type/snmp_contact_spec.rb +8 -0
- data/spec/unit/puppet/type/snmp_location_spec.rb +8 -0
- data/spec/unit/puppet/type/snmp_notification_receiver_spec.rb +50 -0
- data/spec/unit/puppet/type/snmp_notification_spec.rb +8 -0
- data/spec/unit/puppet/type/snmp_protocol_spec.rb +8 -0
- data/spec/unit/puppet/type/snmp_user_spec.rb +63 -0
- data/spec/unit/puppet/type/syslog_server_spec.rb +20 -0
- data/spec/unit/puppet/type/syslog_settings_spec.rb +19 -0
- data/spec/unit/puppet/type/tacacs_global_spec.rb +27 -0
- data/spec/unit/puppet/type/tacacs_server_group_spec.rb +12 -0
- data/spec/unit/puppet/type/tacacs_server_spec.rb +25 -0
- data/spec/unit/puppet/type/tacacs_spec.rb +8 -0
- metadata +338 -0
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:domain_name) do
|
4
|
+
@doc = 'Configure the domain name of the device'
|
5
|
+
|
6
|
+
ensurable
|
7
|
+
|
8
|
+
newparam(:name, namevar: true) do
|
9
|
+
desc 'The domain name of the device'
|
10
|
+
|
11
|
+
validate do |value|
|
12
|
+
if value.is_a? String then super(value)
|
13
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:name_server) do
|
4
|
+
@doc = 'Configure the resolver to use the specified DNS server'
|
5
|
+
|
6
|
+
ensurable
|
7
|
+
|
8
|
+
newparam(:name, namevar: true) do
|
9
|
+
desc 'The hostname or address of the DNS server'
|
10
|
+
|
11
|
+
validate do |value|
|
12
|
+
if value.is_a? String then super(value)
|
13
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:network_interface) do
|
4
|
+
@doc = 'Manage physical network interfaces, e.g. Ethernet1'
|
5
|
+
|
6
|
+
newproperty(:enable) do
|
7
|
+
desc 'Enable the interface, true or false'
|
8
|
+
newvalues(:true, :false)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Parameters (additional data)
|
12
|
+
|
13
|
+
newparam(:name, namevar: true) do
|
14
|
+
desc 'Interface Name, e.g. Ethernet1'
|
15
|
+
|
16
|
+
validate do |value|
|
17
|
+
case value
|
18
|
+
when String then super(value)
|
19
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Properties (state)
|
25
|
+
|
26
|
+
newproperty(:description) do
|
27
|
+
desc 'Interface physical port description'
|
28
|
+
|
29
|
+
validate do |value|
|
30
|
+
case value
|
31
|
+
when String
|
32
|
+
super(value)
|
33
|
+
validate_features_per_value(value)
|
34
|
+
else fail "value #{value.inspect} is invalid, must be a string."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
newproperty(:mtu) do
|
40
|
+
desc 'Interface Maximum Transmission Unit in bytes'
|
41
|
+
munge { |v| Integer(v) }
|
42
|
+
validate do |v|
|
43
|
+
begin
|
44
|
+
Integer(v) ? true : false
|
45
|
+
rescue TypeError => err
|
46
|
+
error "Cannot convert #{v.inspect} to an integer: #{err.message}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
newproperty(:speed) do
|
52
|
+
desc 'Link speed [auto*|10m|100m|1g|10g|40g|56g|100g]'
|
53
|
+
newvalues(:auto, '1g', '10g', '40g', '56g', '100g', '100m', '10m')
|
54
|
+
end
|
55
|
+
|
56
|
+
newproperty(:duplex) do
|
57
|
+
desc 'Duplex mode [auto*|full|half]'
|
58
|
+
newvalues(:auto, :full, :half)
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# rubocop:disable Style/PredicateName
|
3
|
+
|
4
|
+
Puppet::Type.newtype(:network_trunk) do
|
5
|
+
@doc = 'Ethernet logical (switch-port) interface. Configures VLAN trunking.'
|
6
|
+
|
7
|
+
ensurable
|
8
|
+
|
9
|
+
newparam(:name, namevar: true) do
|
10
|
+
desc 'The switch interface name, e.g. "Ethernet1"'
|
11
|
+
|
12
|
+
validate do |value|
|
13
|
+
case value
|
14
|
+
when String then super(value)
|
15
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
newproperty(:encapsulation) do
|
21
|
+
desc 'The vlan-tagging encapsulation protocol, usually dot1q'
|
22
|
+
newvalues(:dot1q, :isl, :negotiate, :none)
|
23
|
+
end
|
24
|
+
|
25
|
+
newproperty(:mode) do
|
26
|
+
desc 'The L2 interface mode, enables or disables trunking'
|
27
|
+
newvalues(:access, :trunk, :dynamic_auto, :dynamic_desirable)
|
28
|
+
end
|
29
|
+
|
30
|
+
newproperty(:untagged_vlan) do
|
31
|
+
desc 'VLAN used for untagged VLAN traffic. a.k.a Native VLAN'
|
32
|
+
|
33
|
+
validate do |value|
|
34
|
+
unless value.between?(1, 4095)
|
35
|
+
fail "value #{value.inspect} is not between 1 and 4095"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
newproperty(:tagged_vlans, array_matching: :all) do
|
41
|
+
desc 'Array of VLAN names used for tagged packets'
|
42
|
+
|
43
|
+
validate do |value|
|
44
|
+
unless value.between?(1, 4095)
|
45
|
+
fail "value #{value.inspect} is not between 1 and 4095"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def insync?(is)
|
50
|
+
is.sort == @should.sort.map(&:to_s)
|
51
|
+
end
|
52
|
+
|
53
|
+
def should_to_s(val)
|
54
|
+
"[#{[*val].join(',')}]"
|
55
|
+
end
|
56
|
+
|
57
|
+
def is_to_s(val)
|
58
|
+
"[#{[*val].join(',')}]"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
newproperty(:pruned_vlans, array_matching: :all) do
|
63
|
+
desc 'Array of VLAN ID numbers used for VLAN pruning'
|
64
|
+
|
65
|
+
validate do |value|
|
66
|
+
unless value.between?(1, 4095)
|
67
|
+
fail "value #{value.inspect} is not between 1 and 4095"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def insync?(is)
|
72
|
+
is.sort == @should.sort.map(&:to_s)
|
73
|
+
end
|
74
|
+
|
75
|
+
def should_to_s(val)
|
76
|
+
"[#{[*val].join(',')}]"
|
77
|
+
end
|
78
|
+
|
79
|
+
def is_to_s(val)
|
80
|
+
"[#{[*val].join(',')}]"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:network_vlan) do
|
4
|
+
@doc = "Manage VLAN's. Layer-2 VLAN's are managed by this resource type."
|
5
|
+
|
6
|
+
ensurable
|
7
|
+
|
8
|
+
feature :describable, 'The ability to add a description to a VLAN.'
|
9
|
+
|
10
|
+
# Parameters
|
11
|
+
|
12
|
+
newparam(:id, namevar: true) do
|
13
|
+
desc 'The VLAN ID, e.g. 100'
|
14
|
+
|
15
|
+
# Make sure we have a string for the ID
|
16
|
+
munge do |value|
|
17
|
+
Integer(value).to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Properties (state management)
|
22
|
+
|
23
|
+
newproperty(:vlan_name) do
|
24
|
+
desc 'The VLAN name, e.g. VLAN100'
|
25
|
+
|
26
|
+
validate do |value|
|
27
|
+
case value
|
28
|
+
when String
|
29
|
+
super(value)
|
30
|
+
validate_features_per_value(value)
|
31
|
+
else fail "value #{value.inspect} is invalid, must be a string."
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
newproperty(:shutdown) do
|
37
|
+
desc 'VLAN shutdown if true, not shutdown if false'
|
38
|
+
newvalues(:true, :false)
|
39
|
+
end
|
40
|
+
|
41
|
+
newproperty(:description, required_features: ['describable']) do
|
42
|
+
desc "The VLAN Description, e.g. 'Engineering'"
|
43
|
+
|
44
|
+
validate do |value|
|
45
|
+
case value
|
46
|
+
when String
|
47
|
+
super(value)
|
48
|
+
validate_features_per_value(value)
|
49
|
+
else fail "value #{value.inspect} is invalid, must be a string."
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:ntp_config) do
|
4
|
+
@doc = 'Global configuration for the NTP system'
|
5
|
+
|
6
|
+
newparam(:name, namevar: true) do
|
7
|
+
desc 'Resource name, not used to configure the device'
|
8
|
+
|
9
|
+
validate do |value|
|
10
|
+
if value.is_a? String then super(value)
|
11
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
newproperty(:source_interface) do
|
17
|
+
desc 'The source interface for the NTP system'
|
18
|
+
|
19
|
+
validate do |value|
|
20
|
+
if value.is_a? String then super(value)
|
21
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:ntp_server) do
|
4
|
+
@doc = 'Specify an NTP server'
|
5
|
+
|
6
|
+
newparam(:name, namevar: true) do
|
7
|
+
desc 'The hostname or address of the NTP server'
|
8
|
+
|
9
|
+
validate do |value|
|
10
|
+
if value.is_a? String then super(value)
|
11
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
newproperty(:prefer) do
|
17
|
+
desc 'Prefer this NTP server [true|false]'
|
18
|
+
newvalues(:true, :false)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:port_channel) do
|
4
|
+
@doc = 'Network Device Link Aggregation Group'
|
5
|
+
|
6
|
+
ensurable
|
7
|
+
|
8
|
+
newparam(:name, namevar: true) do
|
9
|
+
desc 'LAG Name'
|
10
|
+
|
11
|
+
validate do |value|
|
12
|
+
case value
|
13
|
+
when String then super(value)
|
14
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
newparam(:force) do
|
20
|
+
desc 'Force configuration (true / false)'
|
21
|
+
newvalues(:true, :false)
|
22
|
+
end
|
23
|
+
|
24
|
+
newproperty(:id) do
|
25
|
+
desc 'Channel Group ID, e.g. 10'
|
26
|
+
munge { |v| Integer(v) }
|
27
|
+
end
|
28
|
+
|
29
|
+
newproperty(:description) do
|
30
|
+
desc 'Port Channel description'
|
31
|
+
|
32
|
+
validate do |value|
|
33
|
+
if value.is_a? String
|
34
|
+
super(value)
|
35
|
+
validate_features_per_value(value)
|
36
|
+
else fail "value #{value.inspect} is invalid, must be a string."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
newproperty(:mode) do
|
42
|
+
desc 'LACP mode [ passive | active | disabled* ]'
|
43
|
+
newvalues(:active, :passive, :disabled)
|
44
|
+
end
|
45
|
+
|
46
|
+
newproperty(:minimum_links) do
|
47
|
+
desc 'Number of active links required for LAG to be up'
|
48
|
+
munge { |v| Integer(v) }
|
49
|
+
end
|
50
|
+
|
51
|
+
newproperty(:interfaces, array_matching: :all) do
|
52
|
+
desc 'Array of Physical Interfaces'
|
53
|
+
|
54
|
+
validate do |val|
|
55
|
+
fail "value #{val.inspect} must be a string" unless val.is_a? String
|
56
|
+
fail "value #{val.inspect} has no digits" unless /\d+/.match(val)
|
57
|
+
end
|
58
|
+
|
59
|
+
def insync?(is)
|
60
|
+
is.sort == @should.sort.map(&:to_s)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
newproperty(:speed) do
|
65
|
+
desc 'Link speed [auto*|10m|100m|1g|10g|40g|56g|100g]'
|
66
|
+
newvalues(:auto, '1g', '10g', '40g', '56g', '100g', '100m', '10m')
|
67
|
+
end
|
68
|
+
|
69
|
+
newproperty(:duplex) do
|
70
|
+
desc 'Duplex mode [auto*|full|half]'
|
71
|
+
newvalues(:auto, :full, :half)
|
72
|
+
end
|
73
|
+
|
74
|
+
newproperty(:flowcontrol_send) do
|
75
|
+
desc 'Flow control (send) [desired|on|off]'
|
76
|
+
newvalues(:desired, :on, :off)
|
77
|
+
end
|
78
|
+
newproperty(:flowcontrol_receive) do
|
79
|
+
desc 'Flow control (receive) [desired|on|off]'
|
80
|
+
newvalues(:desired, :on, :off)
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:radius) do
|
4
|
+
@doc = 'Enable or disable radius functionality'
|
5
|
+
|
6
|
+
newparam(:name, namevar: true) do
|
7
|
+
desc 'Resource name, not used to manage the device'
|
8
|
+
|
9
|
+
validate do |value|
|
10
|
+
if value.is_a? String then super(value)
|
11
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
newproperty(:enable) do
|
17
|
+
desc 'Enable or disable radius functionality [true|false]'
|
18
|
+
newvalues(:true, :false)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:radius_global) do
|
4
|
+
@doc = 'Configure global radius settings'
|
5
|
+
|
6
|
+
newparam(:name, namevar: true) do
|
7
|
+
desc 'Resource identifier, not used to manage the device'
|
8
|
+
|
9
|
+
validate do |value|
|
10
|
+
if value.is_a? String then super(value)
|
11
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
newproperty(:key) do
|
17
|
+
desc 'Encryption key (plaintext or in hash form depending on key_format)'
|
18
|
+
|
19
|
+
validate do |value|
|
20
|
+
if value.is_a? String then super(value)
|
21
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
newproperty(:key_format) do
|
27
|
+
desc 'Encryption key format [0-7]'
|
28
|
+
munge { |v| Integer(v) }
|
29
|
+
end
|
30
|
+
|
31
|
+
newproperty(:timeout) do
|
32
|
+
desc 'Number of seconds before the timeout period ends'
|
33
|
+
munge { |v| Integer(v) }
|
34
|
+
end
|
35
|
+
|
36
|
+
newproperty(:retransmit_count) do
|
37
|
+
desc 'How many times to retransmit'
|
38
|
+
munge { |v| Integer(v) }
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Puppet::Type.newtype(:radius_server) do
|
4
|
+
@doc = 'Configure a radius server'
|
5
|
+
|
6
|
+
newparam(:name, namevar: true) do
|
7
|
+
desc 'The name of the radius server group'
|
8
|
+
|
9
|
+
validate do |value|
|
10
|
+
if value.is_a? String then super(value)
|
11
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
newproperty(:key) do
|
17
|
+
desc 'Encryption key (plaintext or in hash form depending on key_format)'
|
18
|
+
|
19
|
+
validate do |value|
|
20
|
+
if value.is_a? String then super(value)
|
21
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
newproperty(:key_format) do
|
27
|
+
desc 'Encryption key format [0-7]'
|
28
|
+
munge { |v| Integer(v) }
|
29
|
+
end
|
30
|
+
|
31
|
+
newproperty(:group) do
|
32
|
+
desc 'Server group associated with this server'
|
33
|
+
|
34
|
+
validate do |value|
|
35
|
+
if value.is_a? String then super(value)
|
36
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
newproperty(:deadtime) do
|
42
|
+
desc 'Number of minutes to ignore an unresponsive server'
|
43
|
+
munge { |v| Integer(v) }
|
44
|
+
end
|
45
|
+
|
46
|
+
newproperty(:timeout) do
|
47
|
+
desc 'Number of seconds before the timeout period ends'
|
48
|
+
munge { |v| Integer(v) }
|
49
|
+
end
|
50
|
+
|
51
|
+
newproperty(:vrf) do
|
52
|
+
desc 'Interface to send syslog data from, e.g. "management"'
|
53
|
+
|
54
|
+
validate do |value|
|
55
|
+
if value.is_a? String then super(value)
|
56
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
newproperty(:source_interface) do
|
62
|
+
desc 'Source interface to send syslog data from, e.g. "ethernet 2/1"'
|
63
|
+
|
64
|
+
validate do |value|
|
65
|
+
if value.is_a? String then super(value)
|
66
|
+
else fail "value #{value.inspect} is invalid, must be a String."
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
newproperty(:retransmit_count) do
|
72
|
+
desc 'How many times to retransmit'
|
73
|
+
munge { |v| Integer(v) }
|
74
|
+
end
|
75
|
+
|
76
|
+
newproperty(:acct_port) do
|
77
|
+
desc 'Port number to use for accounting'
|
78
|
+
munge { |v| Integer(v) }
|
79
|
+
end
|
80
|
+
|
81
|
+
newproperty(:accounting_only) do
|
82
|
+
desc 'Enable this server for accounting only'
|
83
|
+
newvalues(:true, :false)
|
84
|
+
end
|
85
|
+
|
86
|
+
newproperty(:auth_port) do
|
87
|
+
desc 'Port number to use for accounting'
|
88
|
+
munge { |v| Integer(v) }
|
89
|
+
end
|
90
|
+
|
91
|
+
newproperty(:authentication_only) do
|
92
|
+
desc 'Enable this server for authentication only'
|
93
|
+
newvalues(:true, :false)
|
94
|
+
end
|
95
|
+
end
|