e96a818782
facter (2.x) only provides facts without interface suffix for * ipaddress * netmask 'macaddress' and 'network' facts will always have the related interface name appended. in turns lookupvar throws errors when strict_variables is enabled.
71 lines
1.9 KiB
Ruby
71 lines
1.9 KiB
Ruby
#
|
|
# has_interface_with
|
|
#
|
|
|
|
module Puppet::Parser::Functions
|
|
newfunction(:has_interface_with, :type => :rvalue, :doc => <<-EOS
|
|
Returns boolean based on kind and value:
|
|
* macaddress
|
|
* netmask
|
|
* ipaddress
|
|
* network
|
|
|
|
has_interface_with("macaddress", "x:x:x:x:x:x")
|
|
has_interface_with("ipaddress", "127.0.0.1") => true
|
|
etc.
|
|
|
|
If no "kind" is given, then the presence of the interface is checked:
|
|
has_interface_with("lo") => true
|
|
EOS
|
|
) do |args|
|
|
|
|
raise(Puppet::ParseError, "has_interface_with(): Wrong number of arguments " +
|
|
"given (#{args.size} for 1 or 2)") if args.size < 1 or args.size > 2
|
|
|
|
interfaces = lookupvar('interfaces')
|
|
|
|
# If we do not have any interfaces, then there are no requested attributes
|
|
return false if (interfaces == :undefined || interfaces.nil?)
|
|
|
|
interfaces = interfaces.split(',')
|
|
|
|
if args.size == 1
|
|
return interfaces.member?(args[0])
|
|
end
|
|
|
|
kind, value = args
|
|
|
|
# Bug with 3.7.1 - 3.7.3 when using future parser throws :undefined_variable
|
|
# https://tickets.puppetlabs.com/browse/PUP-3597
|
|
factval = nil
|
|
begin
|
|
catch :undefined_variable do
|
|
factval = lookupvar(kind)
|
|
end
|
|
rescue Puppet::ParseError # Eat the exception if strict_variables = true is set
|
|
end
|
|
if factval == value
|
|
return true
|
|
end
|
|
|
|
result = false
|
|
interfaces.each do |iface|
|
|
iface.downcase!
|
|
factval = nil
|
|
begin
|
|
# Bug with 3.7.1 - 3.7.3 when using future parser throws :undefined_variable
|
|
# https://tickets.puppetlabs.com/browse/PUP-3597
|
|
catch :undefined_variable do
|
|
factval = lookupvar("#{kind}_#{iface}")
|
|
end
|
|
rescue Puppet::ParseError # Eat the exception if strict_variables = true is set
|
|
end
|
|
if value == factval
|
|
result = true
|
|
break
|
|
end
|
|
end
|
|
|
|
result
|
|
end
|
|
end
|