Puppet Function: nomad_cni::host_network_v4
- Defined in:
- lib/puppet/functions/nomad_cni/host_network_v4.rb
- Function type:
- Ruby 4.x API
Overview
]
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/puppet/functions/nomad_cni/host_network_v4.rb', line 50 Puppet::Functions.create_function(:'nomad_cni::host_network_v4') do dispatch :calculate_host_network_v4 do param 'String', :iface optional_param 'Variant[String, Undef]', :ip_type return_type 'Variant[Array[0, 0], Array[Hash]]' end def calculate_host_network_v4(iface, ip_type = 'v4') if ip_type == 'v4' ip = call_function('fact', "networking.interfaces.#{iface}.ip") netmask = call_function('fact', "networking.interfaces.#{iface}.netmask") cidr = IPAddr.new(netmask).to_i.to_s(2).count('1') network_addr = IPAddr.new(ip).mask(netmask).to_s + "/#{cidr}" public_network = [{ 'public_v4' => { 'cidr' => network_addr, 'interface' => iface } }] elsif ip_type == 'v6' ip = call_function('fact', "networking.interfaces.#{iface}.ip6") netmask = call_function('fact', "networking.interfaces.#{iface}.netmask6") cidr = IPAddr.new(netmask).to_i.to_s(2).count('1') network_addr = IPAddr.new(ip).mask(netmask).to_s + "/#{cidr}" public_network = [{ 'public_v6' => { 'cidr' => network_addr, 'interface' => iface } }] elsif ip_type == 'any' ip = call_function('fact', "networking.interfaces.#{iface}.ip") netmask = call_function('fact', "networking.interfaces.#{iface}.netmask") cidr = IPAddr.new(netmask).to_i.to_s(2).count('1') ip_six = call_function('fact', "networking.interfaces.#{iface}.ip6") netmask_six = call_function('fact', "networking.interfaces.#{iface}.netmask6") cidr_six = IPAddr.new(netmask_six).to_i.to_s(2).count('1') network_addr = IPAddr.new(ip).mask(netmask).to_s + "/#{cidr}" network_addr_six = IPAddr.new(ip_six).mask(netmask_six).to_s + "/#{cidr_six}" public_network = [ { 'public_v4' => { 'cidr' => network_addr_six, 'interface' => iface } }, { 'public_v6' => { 'cidr' => network_addr_six, 'interface' => iface } }, ] else raise ArgumentError, "Invalid IP type: #{ip_type}. It must be 'v4' or 'v6' 'any' or undef. if undef, it defaults to 'v4'" end cni_hash = call_function('fact', 'nomad_cni_hash') if cni_hash.empty? cni_host_network = [] else cni_names = cni_hash.keys cni_host_network = cni_names.map do |cni| ip_addr, subnet_addr = cni_hash[cni]['network'].split('/') network_addr = IPAddr.new(ip_addr).mask(subnet_addr).to_s + "/#{subnet_addr}" { cni => { 'cidr' => network_addr, 'interface' => "br#{cni_hash[cni]['id']}" } } end end cni_host_network + public_network end end |