Add initial meta-stx to support StarlingX build
[pti/rtp.git] / meta-stx / recipes-support / puppet / files / network / ipv6-static-route-support.patch
1 From 49820add1d1e5f63343615ead9b551b8679f466d Mon Sep 17 00:00:00 2001
2 From: Kevin Smith <kevin.smith@windriver.com>
3 Date: Mon, 16 Oct 2017 15:06:37 -0500
4 Subject: [PATCH 1/1] ipv6 static route support
5
6 ---
7  .../lib/puppet/provider/network_route/redhat.rb    |  3 ++-
8  .../network/lib/puppet/type/network_route.rb       | 26 ++++++++++++++--------
9  .../network/spec/unit/type/network_route_spec.rb   |  5 +++++
10  3 files changed, 24 insertions(+), 10 deletions(-)
11
12 diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
13 index 5073519..c289f5f 100644
14 --- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
15 +++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
16 @@ -93,7 +93,8 @@ Puppet::Type.type(:network_route).provide(:redhat) do
17        if provider.network == "default"
18          contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}"
19        else
20 -        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}"
21 +        # provider.name will have cidr notation 
22 +        contents << "#{provider.name} via #{provider.gateway} dev #{provider.interface}"
23        end
24        contents << (provider.options == :absent ? "\n" : " #{provider.options}\n")
25      end
26 diff --git a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
27 index 7ab67dd..fd52c58 100644
28 --- a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
29 +++ b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
30 @@ -5,8 +5,6 @@ Puppet::Type.newtype(:network_route) do
31  
32    ensurable
33  
34 -  IPV4_ADDRESS_REGEX = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/
35 -
36    newparam(:name) do
37      isnamevar
38      desc "The name of the network route"
39 @@ -18,7 +16,7 @@ Puppet::Type.newtype(:network_route) do
40      validate do |value|
41        begin
42          t = IPAddr.new(value) unless value == "default"
43 -      rescue ArgumentError
44 +      rescue
45          fail("Invalid value for network: #{value}")
46        end
47      end
48 @@ -29,17 +27,27 @@ Puppet::Type.newtype(:network_route) do
49      desc "The subnet mask to apply to the route"
50  
51      validate do |value|
52 -      unless (value.length <= 2 or value =~ IPV4_ADDRESS_REGEX)
53 +      unless value.length <= 3 || (IPAddr.new(value) rescue false)
54          fail("Invalid value for argument netmask: #{value}")
55        end
56      end
57  
58      munge do |value|
59 -      case value
60 -      when IPV4_ADDRESS_REGEX
61 -        value
62 -      when /^\d+$/
63 -        IPAddr.new('255.255.255.255').mask(value.strip.to_i).to_s
64 +      # '255.255.255.255'.to_i  will return 255, so we try to convert it back:
65 +      if value.to_i.to_s == value
66 +        if value.to_i <= 32
67 +          IPAddr.new('255.255.255.255').mask(value.strip.to_i).to_s
68 +        else
69 +          IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(value.strip.to_i).to_s
70 +        end
71 +      else
72 +        if (IPAddr.new(value).ipv6? rescue false)
73 +          IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(value).to_s
74 +        elsif (IPAddr.new(value).ipv4? rescue false)
75 +          IPAddr.new('255.255.255.255').mask(value).to_s
76 +        else
77 +          raise("Invalid value for argument netmask: #{value}")
78 +        end
79        end
80      end
81    end
82 diff --git a/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb b/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb
83 index 24e9da3..6e6f3e4 100644
84 --- a/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb
85 +++ b/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb
86 @@ -55,6 +55,11 @@ describe Puppet::Type.type(:network_route) do
87          r[:netmask].should == '255.255.255.0'
88        end
89  
90 +      it 'should convert IPv6 netmasks of the CIDR form' do
91 +        r = Puppet::Type.type(:network_route).new(name: 'lxd bridge', network: 'fd58:281b:6eef:eb3d::', netmask: '64', gateway: 'fd58:281b:6eef:eb3d::1', interface: 'lxdbr0')
92 +        expect(r[:netmask]).to eq('ffff:ffff:ffff:ffff::')
93 +      end
94 +
95        it "should convert netmasks of the expanded netmask form" do
96          r = described_class.new(:name => '192.168.1.0/24', :network => '192.168.1.0', :netmask => '255.255.128.0', :gateway => '23.23.23.42', :interface => 'eth0')
97          r[:netmask].should == '255.255.128.0'
98 -- 
99 1.8.3.1
100