Puppet Function: simplib::bracketize

Defined in:
lib/puppet/functions/simplib/bracketize.rb
Function type:
Ruby 4.x API

Overview

Add brackets to strings of IPv6 addresses and ‘Arrays` of IPv6 addresses based on the rules for bracketing IPv6 addresses.

Ignores anything that does not look like an IPv6 address and return those entries untouched.

Signatures:

  • simplib::bracketize(Array[String] $ip_arr)Variant[String, Array[String]]

    Returns converted input.

    Examples:

    Bracketize ip_arr input

    
    $foo = [ '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
             '2001:0db8:85a3:0000:0000:8a2e:0370:7334/24' ]
    
    $bar = simplib::bracketize($foo)
    
    $bar contains:[ '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]',
                    '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/24' ]

    Parameters:

    • ip_arr (Array[String])

      The array of IPv6 addresses to bracketize

    Returns:

    • (Variant[String, Array[String]])

      converted input

  • simplib::bracketize(String $ipaddr_string)Variant[String, Array[String]]

    Returns converted input.

    Examples:

    Bracketize ipaddr_string input

    
    $foo = '2001:0db8:85a3:0000:0000:8a2e:0370:7334,2001:0db8:85a3:0000:0000:8a2e:0370:7334/24 3456:0db8:85a3:0000:0000:8a2e:0370:7334'
    
    $bar = simplib::bracketize($foo)
    
    $bar contains:[ '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]',
                    '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/24',
                    '[3456:0db8:85a3:0000:0000:8a2e:0370:7334]' ]

    Parameters:

    • ipaddr_string (String)

      The string of IPv6 addresses to bracketize (comma, space, and/or semi-colon separated)

    Returns:

    • (Variant[String, Array[String]])

      converted input



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/puppet/functions/simplib/bracketize.rb', line 8

Puppet::Functions.create_function(:'simplib::bracketize') do

  # @param ip_arr The array of IPv6 addresses to bracketize
  # @return [Variant[String, Array[String]]] converted input
  #
  # @example Bracketize ip_arr input
  #
  #   $foo = [ '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
  #            '2001:0db8:85a3:0000:0000:8a2e:0370:7334/24' ]
  #
  #   $bar = simplib::bracketize($foo)
  #
  #   $bar contains:[ '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]',
  #                   '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/24' ]
  #
  dispatch :bracketize do
    required_param 'Array[String]', :ip_arr
  end

  # @param ipaddr_string The string of IPv6 addresses to bracketize (comma, space, and/or semi-colon separated)
  # @return [Variant[String, Array[String]]] converted input
  #
  # @example Bracketize ipaddr_string input
  #
  #   $foo = '2001:0db8:85a3:0000:0000:8a2e:0370:7334,2001:0db8:85a3:0000:0000:8a2e:0370:7334/24 3456:0db8:85a3:0000:0000:8a2e:0370:7334'
  #
  #   $bar = simplib::bracketize($foo)
  #
  #   $bar contains:[ '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]',
  #                   '[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/24',
  #                   '[3456:0db8:85a3:0000:0000:8a2e:0370:7334]' ]
  #
  dispatch :bracketize_string_input do
    required_param 'String', :ipaddr_string
  end

  def bracketize_string_input(ipaddr_string)
    ip_arr = ipaddr_string.split(/\s|,|;/).delete_if{ |y| y.empty? }
    bracketize(ip_arr)
  end

  def bracketize(ip_arr)
    require 'ipaddr'
    ipaddr = Array(ip_arr).flatten
    retval = Array.new
    ipaddr.each do |x|
      begin
        ip = IPAddr.new(x)
      rescue
        #allowed to fail because input can be string of hostname
        # will just return unaltered input in that case
        retval << x
        next
      end
      # IPv6 Address?
      if ip.ipv6?() then
        if x[0].chr != '[' then
          y = x.split('/')
          y[0] = "[#{y[0]}]"
          retval << y.join('/')
        else
         retval << x
        end
      else
        retval << x
      end
    end

    retval = retval.first if retval.size == 1
    return retval
  end
end