diff options
author | Micah <micah@leap.se> | 2016-05-24 10:19:33 -0400 |
---|---|---|
committer | Micah <micah@leap.se> | 2016-05-24 10:19:33 -0400 |
commit | 1da5dc55ee48fcd437f5b5df00a5b2f3991ec9f1 (patch) | |
tree | 1794e812d83facd93b3007c42632c63ddf1eb2fc /lib/puppet/parser/functions/has_interface_with.rb |
Squashed 'puppet/modules/stdlib/' content from commit 7112363
git-subtree-dir: puppet/modules/stdlib
git-subtree-split: 71123634744b9fe2ec7d6a3e38e9789fd84801e3
Diffstat (limited to 'lib/puppet/parser/functions/has_interface_with.rb')
-rw-r--r-- | lib/puppet/parser/functions/has_interface_with.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/has_interface_with.rb b/lib/puppet/parser/functions/has_interface_with.rb new file mode 100644 index 00000000..36915246 --- /dev/null +++ b/lib/puppet/parser/functions/has_interface_with.rb @@ -0,0 +1,68 @@ +# +# 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 + catch :undefined_variable do + factval = lookupvar(kind) + 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 |