diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2012-11-07 14:03:31 -0800 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2012-11-07 14:03:31 -0800 |
commit | f9616ef72f762937c56881276a7a443acd73d5aa (patch) | |
tree | 5d7ecf2301275f547897a81b7f784b45602e456a /lib/puppet/parser/functions/has_interface_with.rb | |
parent | 0b3e8f59a915fe4536a571234c1eea031b4ad6bb (diff) | |
parent | b97e053cad947ed712ba3f23400e7f5add56ccd1 (diff) |
Merge branch '3.x' into 4.x
* 3.x:
(#13974) Add predicate functions for interface facts
Diffstat (limited to 'lib/puppet/parser/functions/has_interface_with.rb')
-rw-r--r-- | lib/puppet/parser/functions/has_interface_with.rb | 52 |
1 files changed, 52 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 0000000..7f150a7 --- /dev/null +++ b/lib/puppet/parser/functions/has_interface_with.rb @@ -0,0 +1,52 @@ +# +# 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 = interfaces.split(',') + + if args.size == 1 + return interfaces.member?(args[0]) + end + + kind, value = args + + if lookupvar(kind) == value + return true + end + + result = false + interfaces.each do |iface| + if value == lookupvar("#{kind}_#{iface}") + result = true + break + end + end + + result + end +end |