puppet-network: update for stx 5.0 75/8175/1
authorJackie Huang <jackie.huang@windriver.com>
Tue, 8 Jun 2021 02:32:10 +0000 (10:32 +0800)
committerJackie Huang <jackie.huang@windriver.com>
Fri, 6 May 2022 08:48:21 +0000 (16:48 +0800)
* inherit stx-metadata to help apply patches
  from stx 'integ' repo

* remove the local copy of stx patches

Issue-ID: INF-215

Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
Change-Id: Id893dde79f56fd6efbf6f0e018ab80beb8f47bc4

15 files changed:
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/Don-t-write-absent-to-redhat-route-files-and-test-fo.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/fix-absent-options.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/ipv6-static-route-support.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/permit-inservice-update-of-static-routes.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/puppet-network-Kilo-quilt-changes.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/puppet-network-support-ipv6.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/route-options-support.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/Don-t-write-absent-to-redhat-route-files-and-test-fo.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/fix-absent-options.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/ipv6-static-route-support.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/permit-inservice-update-of-static-routes.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/puppet-network-Kilo-quilt-changes.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/puppet-network-support-ipv6.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/route-options-support.patch [deleted file]
meta-starlingx/meta-stx-cloud/recipes-support/puppet/puppet-network_git.bbappend

diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/Don-t-write-absent-to-redhat-route-files-and-test-fo.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/Don-t-write-absent-to-redhat-route-files-and-test-fo.patch
deleted file mode 100644 (file)
index efc5446..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-From 49e103bbeb4d6efe1ca75f581d41ee6a8ed7caf5 Mon Sep 17 00:00:00 2001
-From: Romanos Skiadas <rom.skiad@gmail.com>
-Date: Wed, 2 Nov 2016 14:51:47 -0400
-Subject: [PATCH] Don't write absent to redhat route files and test for this
-
-Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
----
- .../network/lib/puppet/provider/network_route/redhat.rb |  9 +++++++--
- .../spec/unit/provider/network_route/redhat_spec.rb     | 17 ++++++++++++++++-
- 2 files changed, 23 insertions(+), 3 deletions(-)
-
-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
-index f45eab5..9841c8e 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -84,10 +84,15 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-         raise Puppet::Error, "#{provider.name} does not have a #{prop}." if provider.send(prop).nil?
-       end
-       if provider.network == "default"
--        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface} #{provider.options}\n"
-+        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}\n"
-       else
--        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface} #{provider.options}\n"
-+        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}\n"
-       end
-+      contents << if provider.options == :absent
-+                    "\n"
-+                  else
-+                    " #{provider.options}\n"
-+                  end
-     end
-     contents.join
-   end
-diff --git a/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb b/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb
-index dfc9d6b..1ad2128 100644
---- a/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb
-+++ b/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb
-@@ -91,7 +91,18 @@ describe Puppet::Type.type(:network_route).provider(:redhat) do
-       )
-     end
--    let(:content) { described_class.format_file('', [route1_provider, route2_provider, defaultroute_provider]) }
-+    let(:nooptions_provider) do
-+      stub('nooptions_provider',
-+           name: 'default',
-+           network: 'default',
-+           netmask: '',
-+           gateway: '10.0.0.1',
-+           interface: 'eth2',
-+           options: :absent
-+      )
-+    end
-+
-+    let(:content) { described_class.format_file('', [route1_provider, route2_provider, defaultroute_provider, nooptions_provider]) }
-     describe "writing the route line" do
-       describe "For standard (non-default) routes" do
-@@ -122,6 +133,10 @@ describe Puppet::Type.type(:network_route).provider(:redhat) do
-       it "should have the correct fields appended" do
-         content.scan(/^default .*$/).first.should be_include("default via 10.0.0.1 dev eth1")
-       end
-+
-+      it 'should not contain the word absent when no options are defined' do
-+        expect(content).to_not match(/absent/)
-+      end
-     end
-   end
- end
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/fix-absent-options.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/fix-absent-options.patch
deleted file mode 100644 (file)
index 23c738f..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-From f22d4c9d24939afb8f29323adffe3eb570f14804 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=3D=3FUTF-8=3Fq=3FIgor=3D20Gali=3DC4=3D87=3F=3D?=
- <i.galic@brainsware.org>
-Date: Wed, 2 Nov 2016 14:54:28 -0400
-Subject: [PATCH] fix "absent" options
-
-analogous to redhat, we check if options are absent, before appending
-them to the file. This fixes #160
-
-Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
----
- .../lib/puppet/provider/network_route/redhat.rb    | 10 ++---
- .../lib/puppet/provider/network_route/routes.rb    |  3 +-
- .../unit/provider/network_route/routes_spec.rb     | 48 ++++++++++++++++++++++
- 3 files changed, 53 insertions(+), 8 deletions(-)
-
-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
-index 9841c8e..7123d44 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -84,15 +84,11 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-         raise Puppet::Error, "#{provider.name} does not have a #{prop}." if provider.send(prop).nil?
-       end
-       if provider.network == "default"
--        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}\n"
-+        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}"
-       else
--        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}\n"
-+        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}"
-       end
--      contents << if provider.options == :absent
--                    "\n"
--                  else
--                    " #{provider.options}\n"
--                  end
-+      contents << (provider.options == :absent ? "\n" : " #{provider.options}\n")
-     end
-     contents.join
-   end
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb
-index 2dd579f..ca7066d 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb
-@@ -93,7 +93,8 @@ Puppet::Type.type(:network_route).provide(:routes) do
-       raise Puppet::Error, "#{provider.name} is missing the required parameter 'gateway'." if provider.gateway.nil?
-       raise Puppet::Error, "#{provider.name} is missing the required parameter 'interface'." if provider.interface.nil?
--      contents << "#{provider.network} #{provider.netmask} #{provider.gateway} #{provider.interface} #{provider.options}\n"
-+      contents << "#{provider.network} #{provider.netmask} #{provider.gateway} #{provider.interface}"
-+      contents << (provider.options == :absent ? "\n" : " #{provider.options}\n")
-     end
-     contents.join
-diff --git a/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb b/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb
-index 2e55eba..9376739 100644
---- a/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb
-+++ b/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb
-@@ -93,4 +93,52 @@ describe Puppet::Type.type(:network_route).provider(:routes) do
-       end
-     end
-   end
-+  describe 'when formatting simple files' do
-+    let(:route1_provider) do
-+      stub('route1_provider',
-+           name: '172.17.67.0',
-+           network: '172.17.67.0',
-+           netmask: '255.255.255.0',
-+           gateway: '172.18.6.2',
-+           interface: 'vlan200',
-+           options: :absent,
-+      )
-+    end
-+
-+    let(:route2_provider) do
-+      stub('lo_provider',
-+           name: '172.28.45.0',
-+           network: '172.28.45.0',
-+           netmask: '255.255.255.0',
-+           gateway: '172.18.6.2',
-+           interface: 'eth0',
-+           options: :absent,
-+      )
-+    end
-+
-+    let(:content) { described_class.format_file('', [route1_provider, route2_provider]) }
-+
-+    describe 'writing the route line' do
-+      it 'should write only fields' do
-+        expect(content.scan(/^172.17.67.0 .*$/).length).to eq(1)
-+        expect(content.scan(/^172.17.67.0 .*$/).first.split(/\s/, 5).length).to eq(4)
-+      end
-+
-+      it 'should have the correct fields appended' do
-+        expect(content.scan(/^172.17.67.0 .*$/).first).to include('172.17.67.0 255.255.255.0 172.18.6.2 vlan200')
-+      end
-+
-+      it 'should fail if the netmask property is not defined' do
-+        route2_provider.unstub(:netmask)
-+        route2_provider.stubs(:netmask).returns nil
-+        expect { content }.to raise_exception
-+      end
-+
-+      it 'should fail if the gateway property is not defined' do
-+        route2_provider.unstub(:gateway)
-+        route2_provider.stubs(:gateway).returns nil
-+        expect { content }.to raise_exception
-+      end
-+    end
-+  end
- end
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/ipv6-static-route-support.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/ipv6-static-route-support.patch
deleted file mode 100644 (file)
index 10456b1..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-From 49820add1d1e5f63343615ead9b551b8679f466d Mon Sep 17 00:00:00 2001
-From: Kevin Smith <kevin.smith@windriver.com>
-Date: Mon, 16 Oct 2017 15:06:37 -0500
-Subject: [PATCH 1/1] ipv6 static route support
-
----
- .../lib/puppet/provider/network_route/redhat.rb    |  3 ++-
- .../network/lib/puppet/type/network_route.rb       | 26 ++++++++++++++--------
- .../network/spec/unit/type/network_route_spec.rb   |  5 +++++
- 3 files changed, 24 insertions(+), 10 deletions(-)
-
-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
-index 5073519..c289f5f 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -93,7 +93,8 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-       if provider.network == "default"
-         contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}"
-       else
--        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}"
-+        # provider.name will have cidr notation 
-+        contents << "#{provider.name} via #{provider.gateway} dev #{provider.interface}"
-       end
-       contents << (provider.options == :absent ? "\n" : " #{provider.options}\n")
-     end
-diff --git a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-index 7ab67dd..fd52c58 100644
---- a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-@@ -5,8 +5,6 @@ Puppet::Type.newtype(:network_route) do
-   ensurable
--  IPV4_ADDRESS_REGEX = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/
--
-   newparam(:name) do
-     isnamevar
-     desc "The name of the network route"
-@@ -18,7 +16,7 @@ Puppet::Type.newtype(:network_route) do
-     validate do |value|
-       begin
-         t = IPAddr.new(value) unless value == "default"
--      rescue ArgumentError
-+      rescue
-         fail("Invalid value for network: #{value}")
-       end
-     end
-@@ -29,17 +27,27 @@ Puppet::Type.newtype(:network_route) do
-     desc "The subnet mask to apply to the route"
-     validate do |value|
--      unless (value.length <= 2 or value =~ IPV4_ADDRESS_REGEX)
-+      unless value.length <= 3 || (IPAddr.new(value) rescue false)
-         fail("Invalid value for argument netmask: #{value}")
-       end
-     end
-     munge do |value|
--      case value
--      when IPV4_ADDRESS_REGEX
--        value
--      when /^\d+$/
--        IPAddr.new('255.255.255.255').mask(value.strip.to_i).to_s
-+      # '255.255.255.255'.to_i  will return 255, so we try to convert it back:
-+      if value.to_i.to_s == value
-+        if value.to_i <= 32
-+          IPAddr.new('255.255.255.255').mask(value.strip.to_i).to_s
-+        else
-+          IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(value.strip.to_i).to_s
-+        end
-+      else
-+        if (IPAddr.new(value).ipv6? rescue false)
-+          IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(value).to_s
-+        elsif (IPAddr.new(value).ipv4? rescue false)
-+          IPAddr.new('255.255.255.255').mask(value).to_s
-+        else
-+          raise("Invalid value for argument netmask: #{value}")
-+        end
-       end
-     end
-   end
-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
-index 24e9da3..6e6f3e4 100644
---- a/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb
-+++ b/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb
-@@ -55,6 +55,11 @@ describe Puppet::Type.type(:network_route) do
-         r[:netmask].should == '255.255.255.0'
-       end
-+      it 'should convert IPv6 netmasks of the CIDR form' do
-+        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')
-+        expect(r[:netmask]).to eq('ffff:ffff:ffff:ffff::')
-+      end
-+
-       it "should convert netmasks of the expanded netmask form" do
-         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')
-         r[:netmask].should == '255.255.128.0'
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/permit-inservice-update-of-static-routes.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/permit-inservice-update-of-static-routes.patch
deleted file mode 100644 (file)
index 66e7623..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-From 46ec08e58419bb73bf49b44cf32fa3d304236615 Mon Sep 17 00:00:00 2001
-From: Kevin Smith <kevin.smith@windriver.com>
-Date: Thu, 5 Oct 2017 13:33:12 -0500
-Subject: [PATCH 1/1] permit inservice update of static routes
-
----
- .../network/lib/puppet/provider/network_route/redhat.rb  | 16 ++++++++++++++--
- 1 file changed, 14 insertions(+), 2 deletions(-)
-
-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
-index 7123d44..5073519 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -18,12 +18,18 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-   has_feature :provider_options
-+  # WRS: Generate temporary copies.  It will get compared to files under
-+  # /etc/sysconfig/network-scripts afterward.  Only config that have changed
-+  # will get replaced.  Don't let puppet directly manage them, else it will
-+  # trigger un-wanted networking actions (like up/down).
-+  RSCRIPT_DIRECTORY = "/var/run/network-scripts.puppet"
-+
-   def select_file
--    "/etc/sysconfig/network-scripts/route-#{@resource[:interface]}"
-+    "#{RSCRIPT_DIRECTORY}/route-#{@resource[:interface]}"
-   end
-   def self.target_files
--    Dir["/etc/sysconfig/network-scripts/route-*"]
-+    Dir["#{RSCRIPT_DIRECTORY}/route-*"]
-   end
-   def self.parse_file(filename, contents)
-@@ -76,6 +82,7 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-   # Generate an array of sections
-   def self.format_file(filename, providers)
-+    Dir.mkdir(RSCRIPT_DIRECTORY) unless File.exists?(RSCRIPT_DIRECTORY)
-     contents = []
-     contents << header
-     # Build routes
-@@ -103,4 +110,9 @@ Puppet::Type.type(:network_route).provide(:redhat) do
- HEADER
-     str
-   end
-+
-+  def self.post_flush_hook(filename)
-+    File.chmod(0644, filename)
-+  end
-+
- end
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/puppet-network-Kilo-quilt-changes.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/puppet-network-Kilo-quilt-changes.patch
deleted file mode 100644 (file)
index 841198f..0000000
+++ /dev/null
@@ -1,658 +0,0 @@
-From 8e14e2e258a8f2f7189ed37c6337c41fbff0362a Mon Sep 17 00:00:00 2001
-From: Al Bailey <al.bailey@windriver.com>
-Date: Mon, 6 Jun 2016 17:13:09 -0400
-Subject: [PATCH] puppet-network Kilo quilt changes
-
----
- .../lib/puppet/provider/network_config/redhat.rb   |  39 ++-
- .../lib/puppet/provider/network_config/wrlinux.rb  | 296 +++++++++++++++++++++
- .../lib/puppet/provider/network_route/wrlinux.rb   | 109 ++++++++
- .../network/lib/puppet/type/network_config.rb      |   4 +
- packstack/puppet/modules/network/manifests/bond.pp |  22 ++
- .../puppet/modules/network/manifests/bond/setup.pp |   2 +
- .../modules/network/manifests/bond/wrlinux.pp      |  56 ++++
- 7 files changed, 521 insertions(+), 7 deletions(-)
- create mode 100644 packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb
- create mode 100644 packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb
- create mode 100644 packstack/puppet/modules/network/manifests/bond/wrlinux.pp
-
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-index 4b6de7e..758f387 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-@@ -19,7 +19,12 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-   has_feature :provider_options
-   # @return [String] The path to network-script directory on redhat systems
--  SCRIPT_DIRECTORY = "/etc/sysconfig/network-scripts"
-+  # SCRIPT_DIRECTORY = "/etc/sysconfig/network-scripts"
-+  # WRS: Generate temporary copies.  It will get compared to files under
-+  # /etc/sysconfig/network-scripts afterward.  Only config that have changed
-+  # will get replaced.  Don't let puppet directly manage them, else it will
-+  # trigger un-wanted networking actions (like up/down).
-+  SCRIPT_DIRECTORY = "/var/run/network-scripts.puppet"
-   # The valid vlan ID range is 0-4095; 4096 is out of range
-   VLAN_RANGE_REGEX = %r[\d{1,3}|40[0-9][0-5]]
-@@ -35,6 +40,7 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-     :name       => 'DEVICE',
-     :hotplug    => 'HOTPLUG',
-     :mtu        => 'MTU',
-+    :gateway => 'GATEWAY',
-   }
-   # Map provider instances to files based on their name
-@@ -60,8 +66,14 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-   #   RedhatProvider.target_files
-   #   # => ['/etc/sysconfig/network-scripts/ifcfg-eth0', '/etc/sysconfig/network-scripts/ifcfg-eth1']
-   def self.target_files(script_dir = SCRIPT_DIRECTORY)
--    entries = Dir.entries(script_dir).select {|entry| entry.match SCRIPT_REGEX}
--    entries.map {|entry| File.join(SCRIPT_DIRECTORY, entry)}
-+    entries = []
-+    if Dir.exists?(SCRIPT_DIRECTORY)
-+      Dir.foreach(SCRIPT_DIRECTORY) do |item|
-+        next if not item.match SCRIPT_REGEX
-+        entries << item
-+      end
-+    end
-+    entries
-   end
-   # Convert a redhat network script into a hash
-@@ -184,6 +196,8 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-   end
-   def self.format_file(filename, providers)
-+    Dir.mkdir(SCRIPT_DIRECTORY) unless File.exists?(SCRIPT_DIRECTORY)
-+
-     if providers.length == 0
-       return ""
-     elsif providers.length > 1
-@@ -193,11 +207,11 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-     provider = providers[0]
-     props    = {}
--    # Map everything to a flat hash
--    props = (provider.options || {})
-+    props = provider.options if provider.options && provider.options != :absent
-+    # Map everything to a flat hash
-     NAME_MAPPINGS.keys.each do |type_name|
--      if (val = provider.send(type_name))
-+      if (val = provider.send(type_name)) && val != :absent
-         props[type_name] = val
-       end
-     end
-@@ -214,11 +228,11 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-       str << %{#{key}=#{val}\n}
-     end
-+    content.prepend(header)
-     content
-   end
-   def self.unmunge(props)
--
-     pairs = {}
-     [:onboot, :hotplug].each do |bool_property|
-@@ -245,6 +259,17 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-     pairs
-   end
-+  def self.header
-+    str = <<-HEADER
-+# HEADER: This file is is being managed by puppet. Changes to
-+# HEADER: interfaces that are not being managed by puppet will persist;
-+# HEADER: however changes to interfaces that are being managed by puppet will
-+# HEADER: be overwritten. In addition, file order is NOT guaranteed.
-+# HEADER: Last generated at: #{Time.now}
-+HEADER
-+    str
-+  end
-+
-   def self.post_flush_hook(filename)
-     File.chmod(0644, filename)
-   end
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb
-new file mode 100644
-index 0000000..44c645a
---- /dev/null
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb
-@@ -0,0 +1,296 @@
-+require 'puppetx/filemapper'
-+
-+Puppet::Type.type(:network_config).provide(:wrlinux) do
-+  # Wind River Linux network_config interfaces provider.
-+  #
-+  # This provider uses the filemapper mixin to map the interfaces file to a
-+  # collection of network_config providers, and back.
-+  #
-+  include PuppetX::FileMapper
-+
-+  desc "Wind River interfaces style provider"
-+
-+  confine    :osfamily => :wrlinux
-+  defaultfor :osfamily => :wrlinux
-+
-+  has_feature :provider_options
-+  has_feature :hotpluggable
-+
-+  def select_file
-+    '/var/run/interfaces.puppet'
-+  end
-+
-+  def self.target_files
-+    ['/var/run/interfaces.puppet']
-+  end
-+
-+  class MalformedInterfacesError < Puppet::Error
-+    def initialize(msg = nil)
-+      msg = 'Malformed wrlinux interfaces file; cannot instantiate network_config resources' if msg.nil?
-+      super
-+    end
-+  end
-+
-+  def self.raise_malformed
-+    @failed = true
-+    raise MalformedInterfacesError
-+  end
-+
-+  class Instance
-+
-+    attr_reader :name
-+
-+    # Booleans
-+    attr_accessor :onboot, :hotplug
-+
-+
-+    # These fields are going to get rearranged to resolve issue 16
-+    # https://github.com/adrienthebo/puppet-network/issues/16
-+    attr_accessor :ipaddress, :netmask, :family, :method, :mtu
-+
-+    # Options hash
-+    attr_reader :options
-+
-+    def initialize(name)
-+      @name = name
-+
-+      @options = Hash.new {|hash, key| hash[key] = []}
-+    end
-+
-+    def to_hash
-+      h = {
-+        :name      => @name,
-+        :onboot    => @onboot,
-+        :hotplug   => @hotplug,
-+        :ipaddress => @ipaddress,
-+        :netmask   => @netmask,
-+        :family    => @family,
-+        :method    => @method,
-+        :mtu       => @mtu,
-+        :options   => squeeze_options
-+      }
-+
-+      h.inject({}) do |hash, (key, val)|
-+        hash[key] = val unless val.nil?
-+        hash
-+      end
-+    end
-+
-+    def squeeze_options
-+      @options.inject({}) do |hash, (key, value)|
-+        if value.size <= 1
-+          hash[key] = value.pop
-+        else
-+          hash[key] = value
-+        end
-+
-+      hash
-+      end
-+    end
-+
-+    class << self
-+
-+      def reset!
-+        @interfaces = {}
-+      end
-+
-+      # @return [Array<Instance>] All class instances
-+      def all_instances
-+        @interfaces ||= {}
-+        @interfaces
-+      end
-+
-+      def [](name)
-+        if all_instances[name]
-+          obj = all_instances[name]
-+        else
-+          obj = self.new(name)
-+          all_instances[name] = obj
-+        end
-+
-+        obj
-+      end
-+    end
-+  end
-+
-+  def self.parse_file(filename, contents)
-+    # Debian has a very irregular format for the interfaces file. The
-+    # parse_file method is somewhat derived from the ifup executable
-+    # supplied in the debian ifupdown package. The source can be found at
-+    # http://packages.debian.org/squeeze/ifupdown
-+
-+
-+    # The debian interfaces implementation requires global state while parsing
-+    # the file; namely, the stanza being parsed as well as the interface being
-+    # parsed.
-+    status = :none
-+    current_interface = nil
-+
-+    lines = contents.split("\n")
-+    # TODO Join lines that end with a backslash
-+
-+    # Iterate over all lines and determine what attributes they create
-+    lines.each do |line|
-+
-+      # Strip off any trailing comments
-+      line.sub!(/#.*$/, '')
-+
-+      case line
-+      when /^\s*#|^\s*$/
-+        # Ignore comments and blank lines
-+        next
-+
-+      when /^auto|^allow-auto/
-+        # Parse out any auto sections
-+        interfaces = line.split(' ')
-+        interfaces.delete_at(0)
-+
-+        interfaces.each do |name|
-+          Instance[name].onboot = true
-+        end
-+
-+        # Reset the current parse state
-+        current_interface = nil
-+
-+      when /^allow-hotplug/
-+        # parse out allow-hotplug lines
-+
-+        interfaces = line.split(' ')
-+        interfaces.delete_at(0)
-+
-+        interfaces.each do |name|
-+          Instance[name].hotplug = true
-+        end
-+
-+        # Don't reset Reset the current parse state
-+      when /^iface/
-+
-+        # Format of the iface line:
-+        #
-+        # iface <iface> <family> <method>
-+        # zero or more options for <iface>
-+
-+        if match = line.match(/^iface\s+(\S+)\s+(\S+)\s+(\S+)/)
-+          name   = match[1]
-+          family = match[2]
-+          method = match[3]
-+
-+          # If an iface block for this interface has been seen, the file is
-+          # malformed.
-+          raise_malformed if Instance[name] and Instance[name].family
-+
-+          status = :iface
-+          current_interface = name
-+
-+          # This is done automatically
-+          #Instance[name].name   = name
-+          Instance[name].family = family
-+          Instance[name].method = method
-+
-+        else
-+          # If we match on a string with a leading iface, but it isn't in the
-+          # expected format, malformed blar blar
-+          raise_malformed
-+        end
-+
-+      when /^mapping/
-+
-+        # XXX dox
-+        raise Puppet::DevError, "Debian interfaces mapping parsing not implemented."
-+        status = :mapping
-+
-+      else
-+        # We're currently examining a line that is within a mapping or iface
-+        # stanza, so we need to validate the line and add the options it
-+        # specifies to the known state of the interface.
-+
-+        case status
-+        when :iface
-+          if match = line.match(/(\S+)\s+(\S.*)/)
-+            # If we're parsing an iface stanza, then we should receive a set of
-+            # lines that contain two or more space delimited strings. Append
-+            # them as options to the iface in an array.
-+
-+            key = match[1]
-+            val = match[2]
-+
-+            name = current_interface
-+
-+            case key
-+            when 'address'; Instance[name].ipaddress    = val
-+            when 'netmask'; Instance[name].netmask      = val
-+            when 'mtu';     Instance[name].mtu          = val
-+            else            Instance[name].options[key] << val
-+            end
-+          else
-+            raise_malformed
-+          end
-+        when :mapping
-+          raise Puppet::DevError, "Debian interfaces mapping parsing not implemented."
-+        when :none
-+          raise_malformed
-+        end
-+      end
-+    end
-+
-+    Instance.all_instances.map {|name, instance| instance.to_hash }
-+  end
-+
-+  # Generate an array of sections
-+  def self.format_file(filename, providers)
-+    contents = []
-+    contents << header
-+
-+    # Add onboot interfaces
-+    if (auto_interfaces = providers.select {|provider| provider.onboot == true })
-+      stanza = []
-+      stanza << "auto " + auto_interfaces.map(&:name).sort.join(" ")
-+      contents << stanza.join("\n")
-+    end
-+
-+    # Build iface stanzas
-+    providers.sort_by(&:name).each do |provider|
-+      # TODO add validation method
-+      raise Puppet::Error, "#{provider.name} does not have a method." if provider.method.nil?
-+      raise Puppet::Error, "#{provider.name} does not have a family." if provider.family.nil?
-+
-+      stanza = []
-+      stanza << %{iface #{provider.name} #{provider.family} #{provider.method}}
-+
-+      [
-+        [:ipaddress, 'address'],
-+        [:netmask,   'netmask'],
-+        [:mtu,       'mtu'],
-+      ].each do |(property, section)|
-+        stanza << "    #{section} #{provider.send property}" if provider.send(property) and provider.send(property) != :absent
-+      end
-+
-+      if provider.options and provider.options != :absent
-+        provider.options.each_pair do |key, val|
-+          if val.is_a? String
-+            stanza << "    #{key} #{val}"
-+          elsif val.is_a? Array
-+            val.each { |entry| stanza << "    #{key} #{entry}" }
-+          else
-+            raise Puppet::Error, "#{self} options key #{key} expects a String or Array, got #{val.class}"
-+          end
-+        end
-+      end
-+
-+      contents << stanza.join("\n")
-+    end
-+
-+    contents.map {|line| line + "\n\n"}.join
-+  end
-+
-+  def self.header
-+    str = <<-HEADER
-+# HEADER: This file is is being managed by puppet. Changes to
-+# HEADER: interfaces that are not being managed by puppet will persist;
-+# HEADER: however changes to interfaces that are being managed by puppet will
-+# HEADER: be overwritten. In addition, file order is NOT guaranteed.
-+# HEADER: Last generated at: #{Time.now}
-+HEADER
-+    str
-+  end
-+end
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb
-new file mode 100644
-index 0000000..d3fa7b5
---- /dev/null
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb
-@@ -0,0 +1,109 @@
-+require 'ipaddr'
-+require 'puppetx/filemapper'
-+
-+Puppet::Type.type(:network_route).provide(:wrlinux) do
-+  # Wind River Linux network_route routes provider.
-+  #
-+  # This provider uses the filemapper mixin to map the routes file to a
-+  # collection of network_route providers, and back.
-+  #
-+  include PuppetX::FileMapper
-+
-+  desc "Wind River routes style provider"
-+
-+  confine    :osfamily => :wrlinux
-+
-+  # $ dpkg -S /etc/network/if-up.d/20static-routes
-+  # ifupdown-extra: /etc/network/if-up.d/20static-routes
-+  confine    :exists   => '/etc/network/if-up.d/20static-routes'
-+
-+  defaultfor :osfamily => :wrlinux
-+
-+  has_feature :provider_options
-+
-+  def select_file
-+    '/etc/network/routes'
-+  end
-+
-+  def self.target_files
-+    ['/etc/network/routes']
-+  end
-+
-+  class MalformedRoutesError < Puppet::Error
-+    def initialize(msg = nil)
-+      msg = 'Malformed wrlinux routes file; cannot instantiate network_route resources' if msg.nil?
-+      super
-+    end
-+  end
-+
-+  def self.raise_malformed
-+    @failed = true
-+    raise MalformedRoutesError
-+  end
-+
-+  def self.parse_file(filename, contents)
-+    # Build out an empty hash for new routes for storing their configs.
-+    route_hash = Hash.new do |hash, key|
-+      hash[key] = {}
-+      hash[key][:name] = key
-+      hash[key]
-+    end
-+
-+    lines = contents.split("\n")
-+    lines.each do |line|
-+      # Strip off any trailing comments
-+      line.sub!(/#.*$/, '')
-+
-+      if line =~ /^\s*#|^\s*$/
-+        # Ignore comments and blank lines
-+        next
-+      end
-+
-+      route = line.split(' ', 5)
-+
-+      if route.length < 4
-+        raise_malformed
-+      end
-+
-+      # use the CIDR version of the target as :name
-+      cidr_target = "#{route[0]}/#{IPAddr.new(route[1]).to_i.to_s(2).count('1')}"
-+
-+      route_hash[cidr_target][:network] = route[0]
-+      route_hash[cidr_target][:netmask] = route[1]
-+      route_hash[cidr_target][:gateway] = route[2]
-+      route_hash[cidr_target][:interface] = route[3]
-+      route_hash[cidr_target][:options] = route[4] if route[4]
-+    end
-+
-+    route_hash.values
-+  end
-+
-+  # Generate an array of sections
-+  def self.format_file(filename, providers)
-+    contents = []
-+    contents << header
-+
-+    # Build routes
-+    providers.sort_by(&:name).each do |provider|
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'network'." if provider.network.nil?
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'netmask'." if provider.netmask.nil?
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'gateway'." if provider.gateway.nil?
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'interface'." if provider.interface.nil?
-+
-+      contents << "#{provider.network} #{provider.netmask} #{provider.gateway} #{provider.interface} #{provider.options}\n"
-+    end
-+
-+    contents.join
-+  end
-+
-+  def self.header
-+    str = <<-HEADER
-+# HEADER: This file is is being managed by puppet. Changes to
-+# HEADER: routes that are not being managed by puppet will persist;
-+# HEADER: however changes to routes that are being managed by puppet will
-+# HEADER: be overwritten. In addition, file order is NOT guaranteed.
-+# HEADER: Last generated at: #{Time.now}
-+HEADER
-+    str
-+  end
-+end
-diff --git a/packstack/puppet/modules/network/lib/puppet/type/network_config.rb b/packstack/puppet/modules/network/lib/puppet/type/network_config.rb
-index a50a0df..1297ad7 100644
---- a/packstack/puppet/modules/network/lib/puppet/type/network_config.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/type/network_config.rb
-@@ -95,6 +95,10 @@ Puppet::Type.newtype(:network_config) do
-     defaultto :raw
-   end
-+  newproperty(:gateway) do
-+    desc 'The IP address of the network router or gateway device (if any)'
-+  end
-+
-   # `:options` provides an arbitrary passthrough for provider properties, so
-   # that provider specific behavior doesn't clutter up the main type but still
-   # allows for more powerful actions to be taken.
-diff --git a/packstack/puppet/modules/network/manifests/bond.pp b/packstack/puppet/modules/network/manifests/bond.pp
-index d6d98ce..26ca104 100644
---- a/packstack/puppet/modules/network/manifests/bond.pp
-+++ b/packstack/puppet/modules/network/manifests/bond.pp
-@@ -188,6 +188,28 @@ define network::bond(
-         require          => Kmod::Alias[$name],
-       }
-     }
-+    WRLinux: {
-+      network::bond::wrlinux { $name:
-+        slaves    => $slaves,
-+        ensure    => $ensure,
-+        ipaddress => $ipaddress,
-+        netmask   => $netmask,
-+        method    => $method,
-+        family    => $family,
-+        onboot    => $onboot,
-+
-+        mode             => $mode,
-+        miimon           => $miimon,
-+        downdelay        => $downdelay,
-+        updelay          => $updelay,
-+        lacp_rate        => $lacp_rate,
-+        primary          => $primary,
-+        primary_reselect => $primary_reselect,
-+        xmit_hash_policy => $xmit_hash_policy,
-+
-+        require   => Kmod::Alias[$name],
-+      }
-+    }
-     RedHat: {
-       network::bond::redhat { $name:
-         ensure           => $ensure,
-diff --git a/packstack/puppet/modules/network/manifests/bond/setup.pp b/packstack/puppet/modules/network/manifests/bond/setup.pp
-index abe1252..0a30767 100644
---- a/packstack/puppet/modules/network/manifests/bond/setup.pp
-+++ b/packstack/puppet/modules/network/manifests/bond/setup.pp
-@@ -10,5 +10,7 @@ class network::bond::setup {
-         ensure => present,
-       }
-     }
-+    WRLinux: {
-+    }
-   }
- }
-diff --git a/packstack/puppet/modules/network/manifests/bond/wrlinux.pp b/packstack/puppet/modules/network/manifests/bond/wrlinux.pp
-new file mode 100644
-index 0000000..e240341
---- /dev/null
-+++ b/packstack/puppet/modules/network/manifests/bond/wrlinux.pp
-@@ -0,0 +1,56 @@
-+# = Define: network::bond::wrlinux
-+#
-+# Instantiate bonded interfaces on Debian based systems.
-+#
-+# == See also
-+#
-+# * Debian Network Bonding http://wiki.wrlinux.org/Bonding
-+define network::bond::wrlinux(
-+  $slaves,
-+  $ensure    = present,
-+  $ipaddress = undef,
-+  $netmask   = undef,
-+  $method    = undef,
-+  $family    = undef,
-+  $onboot    = undef,
-+
-+  $mode             = undef,
-+  $miimon           = undef,
-+  $downdelay        = undef,
-+  $updelay          = undef,
-+  $lacp_rate        = undef,
-+  $primary          = undef,
-+  $primary_reselect = undef,
-+  $xmit_hash_policy = undef,
-+) {
-+
-+  $raw = {
-+    'bond-slaves'    => join($slaves, ' '),
-+    'bond-mode'      => $mode,
-+    'bond-miimon'    => $miimon,
-+    'bond-downdelay' => $downdelay,
-+    'bond-updelay'   => $updelay,
-+    'bond-lacp-rate' => $lacp_rate,
-+    'bond-primary'   => $primary,
-+    'bond-primary-reselect' => $primary_reselect,
-+    'bond-xmit-hash-policy' => $xmit_hash_policy,
-+  }
-+
-+  $opts = compact_hash($raw)
-+
-+  network_config { $name:
-+    ensure    => $ensure,
-+    ipaddress => $ipaddress,
-+    netmask   => $netmask,
-+    family    => $family,
-+    method    => $method,
-+    onboot    => $onboot,
-+    options   => $opts,
-+  }
-+
-+  network_config { $slaves:
-+    ensure      => absent,
-+    reconfigure => true,
-+    before      => Network_config[$name],
-+  }
-+}
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/puppet-network-support-ipv6.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/puppet-network-support-ipv6.patch
deleted file mode 100644 (file)
index b6d2f3c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-Index: packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-@@ -224,6 +224,11 @@
-     pairs = self.unmunge props
-+    ip_version = provider.send(:family)
-+    if (ip_version.to_s == "inet6")
-+        pairs = self.ipv6_fixup pairs
-+    end
-+
-     content = pairs.inject('') do |str, (key, val)|
-       str << %{#{key}=#{val}\n}
-     end
-@@ -259,6 +264,30 @@
-     pairs
-   end
-+  def self.ipv6_fixup(pairs)
-+    pairs['IPV6INIT'] = 'yes'
-+
-+    if (pairs.include? 'NETMASK' and pairs.include? 'IPADDR')
-+        pairs['IPV6ADDR'] =  pairs['IPADDR'].to_s + "/" + pairs['NETMASK'].to_s
-+        pairs.delete('NETMASK')
-+        pairs.delete('IPADDR')
-+    elsif (pairs.include? 'IPADDR')
-+        pairs['IPV6ADDR'] = pairs['IPADDR'].to_s
-+        pairs.delete('IPADDR')
-+    end
-+
-+    if (pairs.include? 'GATEWAY')
-+        pairs['IPV6_DEFAULTGW'] = pairs['GATEWAY']
-+        pairs.delete('GATEWAY')
-+    end
-+
-+    if (pairs['BOOTPROTO'].to_s == 'dhcp')
-+        pairs['DHCPV6C'] = 'yes'
-+        pairs['DHCLIENTARGS'] = '-1'
-+    end
-+    pairs
-+  end
-+
-   def self.header
-     str = <<-HEADER
- # HEADER: This file is is being managed by puppet. Changes to
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/route-options-support.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/network/route-options-support.patch
deleted file mode 100644 (file)
index 37bf138..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From c26a70ab9d5839f90148c578edc5d15133355194 Mon Sep 17 00:00:00 2001
-From: Kevin Smith <kevin.smith@windriver.com>
-Date: Wed, 25 Oct 2017 07:37:52 -0500
-Subject: [PATCH 1/1] route options support
-
----
- packstack/puppet/modules/network/lib/puppet/type/network_route.rb | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-index fd52c58..13ca06a 100644
---- a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-@@ -3,6 +3,11 @@ require 'ipaddr'
- Puppet::Type.newtype(:network_route) do
-   @doc = "Manage non-volatile route configuration information"
-+  feature :provider_options, <<-EOD
-+    The provider can accept an arbitrary options string. The semantics of
-+    these options will depend on the provider.
-+  EOD
-+
-   ensurable
-   newparam(:name) do
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/Don-t-write-absent-to-redhat-route-files-and-test-fo.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/Don-t-write-absent-to-redhat-route-files-and-test-fo.patch
deleted file mode 100644 (file)
index efc5446..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-From 49e103bbeb4d6efe1ca75f581d41ee6a8ed7caf5 Mon Sep 17 00:00:00 2001
-From: Romanos Skiadas <rom.skiad@gmail.com>
-Date: Wed, 2 Nov 2016 14:51:47 -0400
-Subject: [PATCH] Don't write absent to redhat route files and test for this
-
-Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
----
- .../network/lib/puppet/provider/network_route/redhat.rb |  9 +++++++--
- .../spec/unit/provider/network_route/redhat_spec.rb     | 17 ++++++++++++++++-
- 2 files changed, 23 insertions(+), 3 deletions(-)
-
-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
-index f45eab5..9841c8e 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -84,10 +84,15 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-         raise Puppet::Error, "#{provider.name} does not have a #{prop}." if provider.send(prop).nil?
-       end
-       if provider.network == "default"
--        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface} #{provider.options}\n"
-+        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}\n"
-       else
--        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface} #{provider.options}\n"
-+        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}\n"
-       end
-+      contents << if provider.options == :absent
-+                    "\n"
-+                  else
-+                    " #{provider.options}\n"
-+                  end
-     end
-     contents.join
-   end
-diff --git a/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb b/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb
-index dfc9d6b..1ad2128 100644
---- a/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb
-+++ b/packstack/puppet/modules/network/spec/unit/provider/network_route/redhat_spec.rb
-@@ -91,7 +91,18 @@ describe Puppet::Type.type(:network_route).provider(:redhat) do
-       )
-     end
--    let(:content) { described_class.format_file('', [route1_provider, route2_provider, defaultroute_provider]) }
-+    let(:nooptions_provider) do
-+      stub('nooptions_provider',
-+           name: 'default',
-+           network: 'default',
-+           netmask: '',
-+           gateway: '10.0.0.1',
-+           interface: 'eth2',
-+           options: :absent
-+      )
-+    end
-+
-+    let(:content) { described_class.format_file('', [route1_provider, route2_provider, defaultroute_provider, nooptions_provider]) }
-     describe "writing the route line" do
-       describe "For standard (non-default) routes" do
-@@ -122,6 +133,10 @@ describe Puppet::Type.type(:network_route).provider(:redhat) do
-       it "should have the correct fields appended" do
-         content.scan(/^default .*$/).first.should be_include("default via 10.0.0.1 dev eth1")
-       end
-+
-+      it 'should not contain the word absent when no options are defined' do
-+        expect(content).to_not match(/absent/)
-+      end
-     end
-   end
- end
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/fix-absent-options.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/fix-absent-options.patch
deleted file mode 100644 (file)
index 23c738f..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-From f22d4c9d24939afb8f29323adffe3eb570f14804 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=3D=3FUTF-8=3Fq=3FIgor=3D20Gali=3DC4=3D87=3F=3D?=
- <i.galic@brainsware.org>
-Date: Wed, 2 Nov 2016 14:54:28 -0400
-Subject: [PATCH] fix "absent" options
-
-analogous to redhat, we check if options are absent, before appending
-them to the file. This fixes #160
-
-Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
----
- .../lib/puppet/provider/network_route/redhat.rb    | 10 ++---
- .../lib/puppet/provider/network_route/routes.rb    |  3 +-
- .../unit/provider/network_route/routes_spec.rb     | 48 ++++++++++++++++++++++
- 3 files changed, 53 insertions(+), 8 deletions(-)
-
-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
-index 9841c8e..7123d44 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -84,15 +84,11 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-         raise Puppet::Error, "#{provider.name} does not have a #{prop}." if provider.send(prop).nil?
-       end
-       if provider.network == "default"
--        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}\n"
-+        contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}"
-       else
--        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}\n"
-+        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}"
-       end
--      contents << if provider.options == :absent
--                    "\n"
--                  else
--                    " #{provider.options}\n"
--                  end
-+      contents << (provider.options == :absent ? "\n" : " #{provider.options}\n")
-     end
-     contents.join
-   end
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb
-index 2dd579f..ca7066d 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/routes.rb
-@@ -93,7 +93,8 @@ Puppet::Type.type(:network_route).provide(:routes) do
-       raise Puppet::Error, "#{provider.name} is missing the required parameter 'gateway'." if provider.gateway.nil?
-       raise Puppet::Error, "#{provider.name} is missing the required parameter 'interface'." if provider.interface.nil?
--      contents << "#{provider.network} #{provider.netmask} #{provider.gateway} #{provider.interface} #{provider.options}\n"
-+      contents << "#{provider.network} #{provider.netmask} #{provider.gateway} #{provider.interface}"
-+      contents << (provider.options == :absent ? "\n" : " #{provider.options}\n")
-     end
-     contents.join
-diff --git a/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb b/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb
-index 2e55eba..9376739 100644
---- a/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb
-+++ b/packstack/puppet/modules/network/spec/unit/provider/network_route/routes_spec.rb
-@@ -93,4 +93,52 @@ describe Puppet::Type.type(:network_route).provider(:routes) do
-       end
-     end
-   end
-+  describe 'when formatting simple files' do
-+    let(:route1_provider) do
-+      stub('route1_provider',
-+           name: '172.17.67.0',
-+           network: '172.17.67.0',
-+           netmask: '255.255.255.0',
-+           gateway: '172.18.6.2',
-+           interface: 'vlan200',
-+           options: :absent,
-+      )
-+    end
-+
-+    let(:route2_provider) do
-+      stub('lo_provider',
-+           name: '172.28.45.0',
-+           network: '172.28.45.0',
-+           netmask: '255.255.255.0',
-+           gateway: '172.18.6.2',
-+           interface: 'eth0',
-+           options: :absent,
-+      )
-+    end
-+
-+    let(:content) { described_class.format_file('', [route1_provider, route2_provider]) }
-+
-+    describe 'writing the route line' do
-+      it 'should write only fields' do
-+        expect(content.scan(/^172.17.67.0 .*$/).length).to eq(1)
-+        expect(content.scan(/^172.17.67.0 .*$/).first.split(/\s/, 5).length).to eq(4)
-+      end
-+
-+      it 'should have the correct fields appended' do
-+        expect(content.scan(/^172.17.67.0 .*$/).first).to include('172.17.67.0 255.255.255.0 172.18.6.2 vlan200')
-+      end
-+
-+      it 'should fail if the netmask property is not defined' do
-+        route2_provider.unstub(:netmask)
-+        route2_provider.stubs(:netmask).returns nil
-+        expect { content }.to raise_exception
-+      end
-+
-+      it 'should fail if the gateway property is not defined' do
-+        route2_provider.unstub(:gateway)
-+        route2_provider.stubs(:gateway).returns nil
-+        expect { content }.to raise_exception
-+      end
-+    end
-+  end
- end
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/ipv6-static-route-support.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/ipv6-static-route-support.patch
deleted file mode 100644 (file)
index 10456b1..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-From 49820add1d1e5f63343615ead9b551b8679f466d Mon Sep 17 00:00:00 2001
-From: Kevin Smith <kevin.smith@windriver.com>
-Date: Mon, 16 Oct 2017 15:06:37 -0500
-Subject: [PATCH 1/1] ipv6 static route support
-
----
- .../lib/puppet/provider/network_route/redhat.rb    |  3 ++-
- .../network/lib/puppet/type/network_route.rb       | 26 ++++++++++++++--------
- .../network/spec/unit/type/network_route_spec.rb   |  5 +++++
- 3 files changed, 24 insertions(+), 10 deletions(-)
-
-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
-index 5073519..c289f5f 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -93,7 +93,8 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-       if provider.network == "default"
-         contents << "#{provider.network} via #{provider.gateway} dev #{provider.interface}"
-       else
--        contents << "#{provider.network}/#{provider.netmask} via #{provider.gateway} dev #{provider.interface}"
-+        # provider.name will have cidr notation 
-+        contents << "#{provider.name} via #{provider.gateway} dev #{provider.interface}"
-       end
-       contents << (provider.options == :absent ? "\n" : " #{provider.options}\n")
-     end
-diff --git a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-index 7ab67dd..fd52c58 100644
---- a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-@@ -5,8 +5,6 @@ Puppet::Type.newtype(:network_route) do
-   ensurable
--  IPV4_ADDRESS_REGEX = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/
--
-   newparam(:name) do
-     isnamevar
-     desc "The name of the network route"
-@@ -18,7 +16,7 @@ Puppet::Type.newtype(:network_route) do
-     validate do |value|
-       begin
-         t = IPAddr.new(value) unless value == "default"
--      rescue ArgumentError
-+      rescue
-         fail("Invalid value for network: #{value}")
-       end
-     end
-@@ -29,17 +27,27 @@ Puppet::Type.newtype(:network_route) do
-     desc "The subnet mask to apply to the route"
-     validate do |value|
--      unless (value.length <= 2 or value =~ IPV4_ADDRESS_REGEX)
-+      unless value.length <= 3 || (IPAddr.new(value) rescue false)
-         fail("Invalid value for argument netmask: #{value}")
-       end
-     end
-     munge do |value|
--      case value
--      when IPV4_ADDRESS_REGEX
--        value
--      when /^\d+$/
--        IPAddr.new('255.255.255.255').mask(value.strip.to_i).to_s
-+      # '255.255.255.255'.to_i  will return 255, so we try to convert it back:
-+      if value.to_i.to_s == value
-+        if value.to_i <= 32
-+          IPAddr.new('255.255.255.255').mask(value.strip.to_i).to_s
-+        else
-+          IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(value.strip.to_i).to_s
-+        end
-+      else
-+        if (IPAddr.new(value).ipv6? rescue false)
-+          IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(value).to_s
-+        elsif (IPAddr.new(value).ipv4? rescue false)
-+          IPAddr.new('255.255.255.255').mask(value).to_s
-+        else
-+          raise("Invalid value for argument netmask: #{value}")
-+        end
-       end
-     end
-   end
-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
-index 24e9da3..6e6f3e4 100644
---- a/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb
-+++ b/packstack/puppet/modules/network/spec/unit/type/network_route_spec.rb
-@@ -55,6 +55,11 @@ describe Puppet::Type.type(:network_route) do
-         r[:netmask].should == '255.255.255.0'
-       end
-+      it 'should convert IPv6 netmasks of the CIDR form' do
-+        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')
-+        expect(r[:netmask]).to eq('ffff:ffff:ffff:ffff::')
-+      end
-+
-       it "should convert netmasks of the expanded netmask form" do
-         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')
-         r[:netmask].should == '255.255.128.0'
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/permit-inservice-update-of-static-routes.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/permit-inservice-update-of-static-routes.patch
deleted file mode 100644 (file)
index 66e7623..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-From 46ec08e58419bb73bf49b44cf32fa3d304236615 Mon Sep 17 00:00:00 2001
-From: Kevin Smith <kevin.smith@windriver.com>
-Date: Thu, 5 Oct 2017 13:33:12 -0500
-Subject: [PATCH 1/1] permit inservice update of static routes
-
----
- .../network/lib/puppet/provider/network_route/redhat.rb  | 16 ++++++++++++++--
- 1 file changed, 14 insertions(+), 2 deletions(-)
-
-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
-index 7123d44..5073519 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/redhat.rb
-@@ -18,12 +18,18 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-   has_feature :provider_options
-+  # WRS: Generate temporary copies.  It will get compared to files under
-+  # /etc/sysconfig/network-scripts afterward.  Only config that have changed
-+  # will get replaced.  Don't let puppet directly manage them, else it will
-+  # trigger un-wanted networking actions (like up/down).
-+  RSCRIPT_DIRECTORY = "/var/run/network-scripts.puppet"
-+
-   def select_file
--    "/etc/sysconfig/network-scripts/route-#{@resource[:interface]}"
-+    "#{RSCRIPT_DIRECTORY}/route-#{@resource[:interface]}"
-   end
-   def self.target_files
--    Dir["/etc/sysconfig/network-scripts/route-*"]
-+    Dir["#{RSCRIPT_DIRECTORY}/route-*"]
-   end
-   def self.parse_file(filename, contents)
-@@ -76,6 +82,7 @@ Puppet::Type.type(:network_route).provide(:redhat) do
-   # Generate an array of sections
-   def self.format_file(filename, providers)
-+    Dir.mkdir(RSCRIPT_DIRECTORY) unless File.exists?(RSCRIPT_DIRECTORY)
-     contents = []
-     contents << header
-     # Build routes
-@@ -103,4 +110,9 @@ Puppet::Type.type(:network_route).provide(:redhat) do
- HEADER
-     str
-   end
-+
-+  def self.post_flush_hook(filename)
-+    File.chmod(0644, filename)
-+  end
-+
- end
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/puppet-network-Kilo-quilt-changes.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/puppet-network-Kilo-quilt-changes.patch
deleted file mode 100644 (file)
index 841198f..0000000
+++ /dev/null
@@ -1,658 +0,0 @@
-From 8e14e2e258a8f2f7189ed37c6337c41fbff0362a Mon Sep 17 00:00:00 2001
-From: Al Bailey <al.bailey@windriver.com>
-Date: Mon, 6 Jun 2016 17:13:09 -0400
-Subject: [PATCH] puppet-network Kilo quilt changes
-
----
- .../lib/puppet/provider/network_config/redhat.rb   |  39 ++-
- .../lib/puppet/provider/network_config/wrlinux.rb  | 296 +++++++++++++++++++++
- .../lib/puppet/provider/network_route/wrlinux.rb   | 109 ++++++++
- .../network/lib/puppet/type/network_config.rb      |   4 +
- packstack/puppet/modules/network/manifests/bond.pp |  22 ++
- .../puppet/modules/network/manifests/bond/setup.pp |   2 +
- .../modules/network/manifests/bond/wrlinux.pp      |  56 ++++
- 7 files changed, 521 insertions(+), 7 deletions(-)
- create mode 100644 packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb
- create mode 100644 packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb
- create mode 100644 packstack/puppet/modules/network/manifests/bond/wrlinux.pp
-
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-index 4b6de7e..758f387 100644
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-@@ -19,7 +19,12 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-   has_feature :provider_options
-   # @return [String] The path to network-script directory on redhat systems
--  SCRIPT_DIRECTORY = "/etc/sysconfig/network-scripts"
-+  # SCRIPT_DIRECTORY = "/etc/sysconfig/network-scripts"
-+  # WRS: Generate temporary copies.  It will get compared to files under
-+  # /etc/sysconfig/network-scripts afterward.  Only config that have changed
-+  # will get replaced.  Don't let puppet directly manage them, else it will
-+  # trigger un-wanted networking actions (like up/down).
-+  SCRIPT_DIRECTORY = "/var/run/network-scripts.puppet"
-   # The valid vlan ID range is 0-4095; 4096 is out of range
-   VLAN_RANGE_REGEX = %r[\d{1,3}|40[0-9][0-5]]
-@@ -35,6 +40,7 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-     :name       => 'DEVICE',
-     :hotplug    => 'HOTPLUG',
-     :mtu        => 'MTU',
-+    :gateway => 'GATEWAY',
-   }
-   # Map provider instances to files based on their name
-@@ -60,8 +66,14 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-   #   RedhatProvider.target_files
-   #   # => ['/etc/sysconfig/network-scripts/ifcfg-eth0', '/etc/sysconfig/network-scripts/ifcfg-eth1']
-   def self.target_files(script_dir = SCRIPT_DIRECTORY)
--    entries = Dir.entries(script_dir).select {|entry| entry.match SCRIPT_REGEX}
--    entries.map {|entry| File.join(SCRIPT_DIRECTORY, entry)}
-+    entries = []
-+    if Dir.exists?(SCRIPT_DIRECTORY)
-+      Dir.foreach(SCRIPT_DIRECTORY) do |item|
-+        next if not item.match SCRIPT_REGEX
-+        entries << item
-+      end
-+    end
-+    entries
-   end
-   # Convert a redhat network script into a hash
-@@ -184,6 +196,8 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-   end
-   def self.format_file(filename, providers)
-+    Dir.mkdir(SCRIPT_DIRECTORY) unless File.exists?(SCRIPT_DIRECTORY)
-+
-     if providers.length == 0
-       return ""
-     elsif providers.length > 1
-@@ -193,11 +207,11 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-     provider = providers[0]
-     props    = {}
--    # Map everything to a flat hash
--    props = (provider.options || {})
-+    props = provider.options if provider.options && provider.options != :absent
-+    # Map everything to a flat hash
-     NAME_MAPPINGS.keys.each do |type_name|
--      if (val = provider.send(type_name))
-+      if (val = provider.send(type_name)) && val != :absent
-         props[type_name] = val
-       end
-     end
-@@ -214,11 +228,11 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-       str << %{#{key}=#{val}\n}
-     end
-+    content.prepend(header)
-     content
-   end
-   def self.unmunge(props)
--
-     pairs = {}
-     [:onboot, :hotplug].each do |bool_property|
-@@ -245,6 +259,17 @@ Puppet::Type.type(:network_config).provide(:redhat) do
-     pairs
-   end
-+  def self.header
-+    str = <<-HEADER
-+# HEADER: This file is is being managed by puppet. Changes to
-+# HEADER: interfaces that are not being managed by puppet will persist;
-+# HEADER: however changes to interfaces that are being managed by puppet will
-+# HEADER: be overwritten. In addition, file order is NOT guaranteed.
-+# HEADER: Last generated at: #{Time.now}
-+HEADER
-+    str
-+  end
-+
-   def self.post_flush_hook(filename)
-     File.chmod(0644, filename)
-   end
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb
-new file mode 100644
-index 0000000..44c645a
---- /dev/null
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_config/wrlinux.rb
-@@ -0,0 +1,296 @@
-+require 'puppetx/filemapper'
-+
-+Puppet::Type.type(:network_config).provide(:wrlinux) do
-+  # Wind River Linux network_config interfaces provider.
-+  #
-+  # This provider uses the filemapper mixin to map the interfaces file to a
-+  # collection of network_config providers, and back.
-+  #
-+  include PuppetX::FileMapper
-+
-+  desc "Wind River interfaces style provider"
-+
-+  confine    :osfamily => :wrlinux
-+  defaultfor :osfamily => :wrlinux
-+
-+  has_feature :provider_options
-+  has_feature :hotpluggable
-+
-+  def select_file
-+    '/var/run/interfaces.puppet'
-+  end
-+
-+  def self.target_files
-+    ['/var/run/interfaces.puppet']
-+  end
-+
-+  class MalformedInterfacesError < Puppet::Error
-+    def initialize(msg = nil)
-+      msg = 'Malformed wrlinux interfaces file; cannot instantiate network_config resources' if msg.nil?
-+      super
-+    end
-+  end
-+
-+  def self.raise_malformed
-+    @failed = true
-+    raise MalformedInterfacesError
-+  end
-+
-+  class Instance
-+
-+    attr_reader :name
-+
-+    # Booleans
-+    attr_accessor :onboot, :hotplug
-+
-+
-+    # These fields are going to get rearranged to resolve issue 16
-+    # https://github.com/adrienthebo/puppet-network/issues/16
-+    attr_accessor :ipaddress, :netmask, :family, :method, :mtu
-+
-+    # Options hash
-+    attr_reader :options
-+
-+    def initialize(name)
-+      @name = name
-+
-+      @options = Hash.new {|hash, key| hash[key] = []}
-+    end
-+
-+    def to_hash
-+      h = {
-+        :name      => @name,
-+        :onboot    => @onboot,
-+        :hotplug   => @hotplug,
-+        :ipaddress => @ipaddress,
-+        :netmask   => @netmask,
-+        :family    => @family,
-+        :method    => @method,
-+        :mtu       => @mtu,
-+        :options   => squeeze_options
-+      }
-+
-+      h.inject({}) do |hash, (key, val)|
-+        hash[key] = val unless val.nil?
-+        hash
-+      end
-+    end
-+
-+    def squeeze_options
-+      @options.inject({}) do |hash, (key, value)|
-+        if value.size <= 1
-+          hash[key] = value.pop
-+        else
-+          hash[key] = value
-+        end
-+
-+      hash
-+      end
-+    end
-+
-+    class << self
-+
-+      def reset!
-+        @interfaces = {}
-+      end
-+
-+      # @return [Array<Instance>] All class instances
-+      def all_instances
-+        @interfaces ||= {}
-+        @interfaces
-+      end
-+
-+      def [](name)
-+        if all_instances[name]
-+          obj = all_instances[name]
-+        else
-+          obj = self.new(name)
-+          all_instances[name] = obj
-+        end
-+
-+        obj
-+      end
-+    end
-+  end
-+
-+  def self.parse_file(filename, contents)
-+    # Debian has a very irregular format for the interfaces file. The
-+    # parse_file method is somewhat derived from the ifup executable
-+    # supplied in the debian ifupdown package. The source can be found at
-+    # http://packages.debian.org/squeeze/ifupdown
-+
-+
-+    # The debian interfaces implementation requires global state while parsing
-+    # the file; namely, the stanza being parsed as well as the interface being
-+    # parsed.
-+    status = :none
-+    current_interface = nil
-+
-+    lines = contents.split("\n")
-+    # TODO Join lines that end with a backslash
-+
-+    # Iterate over all lines and determine what attributes they create
-+    lines.each do |line|
-+
-+      # Strip off any trailing comments
-+      line.sub!(/#.*$/, '')
-+
-+      case line
-+      when /^\s*#|^\s*$/
-+        # Ignore comments and blank lines
-+        next
-+
-+      when /^auto|^allow-auto/
-+        # Parse out any auto sections
-+        interfaces = line.split(' ')
-+        interfaces.delete_at(0)
-+
-+        interfaces.each do |name|
-+          Instance[name].onboot = true
-+        end
-+
-+        # Reset the current parse state
-+        current_interface = nil
-+
-+      when /^allow-hotplug/
-+        # parse out allow-hotplug lines
-+
-+        interfaces = line.split(' ')
-+        interfaces.delete_at(0)
-+
-+        interfaces.each do |name|
-+          Instance[name].hotplug = true
-+        end
-+
-+        # Don't reset Reset the current parse state
-+      when /^iface/
-+
-+        # Format of the iface line:
-+        #
-+        # iface <iface> <family> <method>
-+        # zero or more options for <iface>
-+
-+        if match = line.match(/^iface\s+(\S+)\s+(\S+)\s+(\S+)/)
-+          name   = match[1]
-+          family = match[2]
-+          method = match[3]
-+
-+          # If an iface block for this interface has been seen, the file is
-+          # malformed.
-+          raise_malformed if Instance[name] and Instance[name].family
-+
-+          status = :iface
-+          current_interface = name
-+
-+          # This is done automatically
-+          #Instance[name].name   = name
-+          Instance[name].family = family
-+          Instance[name].method = method
-+
-+        else
-+          # If we match on a string with a leading iface, but it isn't in the
-+          # expected format, malformed blar blar
-+          raise_malformed
-+        end
-+
-+      when /^mapping/
-+
-+        # XXX dox
-+        raise Puppet::DevError, "Debian interfaces mapping parsing not implemented."
-+        status = :mapping
-+
-+      else
-+        # We're currently examining a line that is within a mapping or iface
-+        # stanza, so we need to validate the line and add the options it
-+        # specifies to the known state of the interface.
-+
-+        case status
-+        when :iface
-+          if match = line.match(/(\S+)\s+(\S.*)/)
-+            # If we're parsing an iface stanza, then we should receive a set of
-+            # lines that contain two or more space delimited strings. Append
-+            # them as options to the iface in an array.
-+
-+            key = match[1]
-+            val = match[2]
-+
-+            name = current_interface
-+
-+            case key
-+            when 'address'; Instance[name].ipaddress    = val
-+            when 'netmask'; Instance[name].netmask      = val
-+            when 'mtu';     Instance[name].mtu          = val
-+            else            Instance[name].options[key] << val
-+            end
-+          else
-+            raise_malformed
-+          end
-+        when :mapping
-+          raise Puppet::DevError, "Debian interfaces mapping parsing not implemented."
-+        when :none
-+          raise_malformed
-+        end
-+      end
-+    end
-+
-+    Instance.all_instances.map {|name, instance| instance.to_hash }
-+  end
-+
-+  # Generate an array of sections
-+  def self.format_file(filename, providers)
-+    contents = []
-+    contents << header
-+
-+    # Add onboot interfaces
-+    if (auto_interfaces = providers.select {|provider| provider.onboot == true })
-+      stanza = []
-+      stanza << "auto " + auto_interfaces.map(&:name).sort.join(" ")
-+      contents << stanza.join("\n")
-+    end
-+
-+    # Build iface stanzas
-+    providers.sort_by(&:name).each do |provider|
-+      # TODO add validation method
-+      raise Puppet::Error, "#{provider.name} does not have a method." if provider.method.nil?
-+      raise Puppet::Error, "#{provider.name} does not have a family." if provider.family.nil?
-+
-+      stanza = []
-+      stanza << %{iface #{provider.name} #{provider.family} #{provider.method}}
-+
-+      [
-+        [:ipaddress, 'address'],
-+        [:netmask,   'netmask'],
-+        [:mtu,       'mtu'],
-+      ].each do |(property, section)|
-+        stanza << "    #{section} #{provider.send property}" if provider.send(property) and provider.send(property) != :absent
-+      end
-+
-+      if provider.options and provider.options != :absent
-+        provider.options.each_pair do |key, val|
-+          if val.is_a? String
-+            stanza << "    #{key} #{val}"
-+          elsif val.is_a? Array
-+            val.each { |entry| stanza << "    #{key} #{entry}" }
-+          else
-+            raise Puppet::Error, "#{self} options key #{key} expects a String or Array, got #{val.class}"
-+          end
-+        end
-+      end
-+
-+      contents << stanza.join("\n")
-+    end
-+
-+    contents.map {|line| line + "\n\n"}.join
-+  end
-+
-+  def self.header
-+    str = <<-HEADER
-+# HEADER: This file is is being managed by puppet. Changes to
-+# HEADER: interfaces that are not being managed by puppet will persist;
-+# HEADER: however changes to interfaces that are being managed by puppet will
-+# HEADER: be overwritten. In addition, file order is NOT guaranteed.
-+# HEADER: Last generated at: #{Time.now}
-+HEADER
-+    str
-+  end
-+end
-diff --git a/packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb b/packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb
-new file mode 100644
-index 0000000..d3fa7b5
---- /dev/null
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_route/wrlinux.rb
-@@ -0,0 +1,109 @@
-+require 'ipaddr'
-+require 'puppetx/filemapper'
-+
-+Puppet::Type.type(:network_route).provide(:wrlinux) do
-+  # Wind River Linux network_route routes provider.
-+  #
-+  # This provider uses the filemapper mixin to map the routes file to a
-+  # collection of network_route providers, and back.
-+  #
-+  include PuppetX::FileMapper
-+
-+  desc "Wind River routes style provider"
-+
-+  confine    :osfamily => :wrlinux
-+
-+  # $ dpkg -S /etc/network/if-up.d/20static-routes
-+  # ifupdown-extra: /etc/network/if-up.d/20static-routes
-+  confine    :exists   => '/etc/network/if-up.d/20static-routes'
-+
-+  defaultfor :osfamily => :wrlinux
-+
-+  has_feature :provider_options
-+
-+  def select_file
-+    '/etc/network/routes'
-+  end
-+
-+  def self.target_files
-+    ['/etc/network/routes']
-+  end
-+
-+  class MalformedRoutesError < Puppet::Error
-+    def initialize(msg = nil)
-+      msg = 'Malformed wrlinux routes file; cannot instantiate network_route resources' if msg.nil?
-+      super
-+    end
-+  end
-+
-+  def self.raise_malformed
-+    @failed = true
-+    raise MalformedRoutesError
-+  end
-+
-+  def self.parse_file(filename, contents)
-+    # Build out an empty hash for new routes for storing their configs.
-+    route_hash = Hash.new do |hash, key|
-+      hash[key] = {}
-+      hash[key][:name] = key
-+      hash[key]
-+    end
-+
-+    lines = contents.split("\n")
-+    lines.each do |line|
-+      # Strip off any trailing comments
-+      line.sub!(/#.*$/, '')
-+
-+      if line =~ /^\s*#|^\s*$/
-+        # Ignore comments and blank lines
-+        next
-+      end
-+
-+      route = line.split(' ', 5)
-+
-+      if route.length < 4
-+        raise_malformed
-+      end
-+
-+      # use the CIDR version of the target as :name
-+      cidr_target = "#{route[0]}/#{IPAddr.new(route[1]).to_i.to_s(2).count('1')}"
-+
-+      route_hash[cidr_target][:network] = route[0]
-+      route_hash[cidr_target][:netmask] = route[1]
-+      route_hash[cidr_target][:gateway] = route[2]
-+      route_hash[cidr_target][:interface] = route[3]
-+      route_hash[cidr_target][:options] = route[4] if route[4]
-+    end
-+
-+    route_hash.values
-+  end
-+
-+  # Generate an array of sections
-+  def self.format_file(filename, providers)
-+    contents = []
-+    contents << header
-+
-+    # Build routes
-+    providers.sort_by(&:name).each do |provider|
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'network'." if provider.network.nil?
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'netmask'." if provider.netmask.nil?
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'gateway'." if provider.gateway.nil?
-+      raise Puppet::Error, "#{provider.name} is missing the required parameter 'interface'." if provider.interface.nil?
-+
-+      contents << "#{provider.network} #{provider.netmask} #{provider.gateway} #{provider.interface} #{provider.options}\n"
-+    end
-+
-+    contents.join
-+  end
-+
-+  def self.header
-+    str = <<-HEADER
-+# HEADER: This file is is being managed by puppet. Changes to
-+# HEADER: routes that are not being managed by puppet will persist;
-+# HEADER: however changes to routes that are being managed by puppet will
-+# HEADER: be overwritten. In addition, file order is NOT guaranteed.
-+# HEADER: Last generated at: #{Time.now}
-+HEADER
-+    str
-+  end
-+end
-diff --git a/packstack/puppet/modules/network/lib/puppet/type/network_config.rb b/packstack/puppet/modules/network/lib/puppet/type/network_config.rb
-index a50a0df..1297ad7 100644
---- a/packstack/puppet/modules/network/lib/puppet/type/network_config.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/type/network_config.rb
-@@ -95,6 +95,10 @@ Puppet::Type.newtype(:network_config) do
-     defaultto :raw
-   end
-+  newproperty(:gateway) do
-+    desc 'The IP address of the network router or gateway device (if any)'
-+  end
-+
-   # `:options` provides an arbitrary passthrough for provider properties, so
-   # that provider specific behavior doesn't clutter up the main type but still
-   # allows for more powerful actions to be taken.
-diff --git a/packstack/puppet/modules/network/manifests/bond.pp b/packstack/puppet/modules/network/manifests/bond.pp
-index d6d98ce..26ca104 100644
---- a/packstack/puppet/modules/network/manifests/bond.pp
-+++ b/packstack/puppet/modules/network/manifests/bond.pp
-@@ -188,6 +188,28 @@ define network::bond(
-         require          => Kmod::Alias[$name],
-       }
-     }
-+    WRLinux: {
-+      network::bond::wrlinux { $name:
-+        slaves    => $slaves,
-+        ensure    => $ensure,
-+        ipaddress => $ipaddress,
-+        netmask   => $netmask,
-+        method    => $method,
-+        family    => $family,
-+        onboot    => $onboot,
-+
-+        mode             => $mode,
-+        miimon           => $miimon,
-+        downdelay        => $downdelay,
-+        updelay          => $updelay,
-+        lacp_rate        => $lacp_rate,
-+        primary          => $primary,
-+        primary_reselect => $primary_reselect,
-+        xmit_hash_policy => $xmit_hash_policy,
-+
-+        require   => Kmod::Alias[$name],
-+      }
-+    }
-     RedHat: {
-       network::bond::redhat { $name:
-         ensure           => $ensure,
-diff --git a/packstack/puppet/modules/network/manifests/bond/setup.pp b/packstack/puppet/modules/network/manifests/bond/setup.pp
-index abe1252..0a30767 100644
---- a/packstack/puppet/modules/network/manifests/bond/setup.pp
-+++ b/packstack/puppet/modules/network/manifests/bond/setup.pp
-@@ -10,5 +10,7 @@ class network::bond::setup {
-         ensure => present,
-       }
-     }
-+    WRLinux: {
-+    }
-   }
- }
-diff --git a/packstack/puppet/modules/network/manifests/bond/wrlinux.pp b/packstack/puppet/modules/network/manifests/bond/wrlinux.pp
-new file mode 100644
-index 0000000..e240341
---- /dev/null
-+++ b/packstack/puppet/modules/network/manifests/bond/wrlinux.pp
-@@ -0,0 +1,56 @@
-+# = Define: network::bond::wrlinux
-+#
-+# Instantiate bonded interfaces on Debian based systems.
-+#
-+# == See also
-+#
-+# * Debian Network Bonding http://wiki.wrlinux.org/Bonding
-+define network::bond::wrlinux(
-+  $slaves,
-+  $ensure    = present,
-+  $ipaddress = undef,
-+  $netmask   = undef,
-+  $method    = undef,
-+  $family    = undef,
-+  $onboot    = undef,
-+
-+  $mode             = undef,
-+  $miimon           = undef,
-+  $downdelay        = undef,
-+  $updelay          = undef,
-+  $lacp_rate        = undef,
-+  $primary          = undef,
-+  $primary_reselect = undef,
-+  $xmit_hash_policy = undef,
-+) {
-+
-+  $raw = {
-+    'bond-slaves'    => join($slaves, ' '),
-+    'bond-mode'      => $mode,
-+    'bond-miimon'    => $miimon,
-+    'bond-downdelay' => $downdelay,
-+    'bond-updelay'   => $updelay,
-+    'bond-lacp-rate' => $lacp_rate,
-+    'bond-primary'   => $primary,
-+    'bond-primary-reselect' => $primary_reselect,
-+    'bond-xmit-hash-policy' => $xmit_hash_policy,
-+  }
-+
-+  $opts = compact_hash($raw)
-+
-+  network_config { $name:
-+    ensure    => $ensure,
-+    ipaddress => $ipaddress,
-+    netmask   => $netmask,
-+    family    => $family,
-+    method    => $method,
-+    onboot    => $onboot,
-+    options   => $opts,
-+  }
-+
-+  network_config { $slaves:
-+    ensure      => absent,
-+    reconfigure => true,
-+    before      => Network_config[$name],
-+  }
-+}
--- 
-1.8.3.1
-
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/puppet-network-support-ipv6.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/puppet-network-support-ipv6.patch
deleted file mode 100644 (file)
index b6d2f3c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-Index: packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
---- a/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/provider/network_config/redhat.rb
-@@ -224,6 +224,11 @@
-     pairs = self.unmunge props
-+    ip_version = provider.send(:family)
-+    if (ip_version.to_s == "inet6")
-+        pairs = self.ipv6_fixup pairs
-+    end
-+
-     content = pairs.inject('') do |str, (key, val)|
-       str << %{#{key}=#{val}\n}
-     end
-@@ -259,6 +264,30 @@
-     pairs
-   end
-+  def self.ipv6_fixup(pairs)
-+    pairs['IPV6INIT'] = 'yes'
-+
-+    if (pairs.include? 'NETMASK' and pairs.include? 'IPADDR')
-+        pairs['IPV6ADDR'] =  pairs['IPADDR'].to_s + "/" + pairs['NETMASK'].to_s
-+        pairs.delete('NETMASK')
-+        pairs.delete('IPADDR')
-+    elsif (pairs.include? 'IPADDR')
-+        pairs['IPV6ADDR'] = pairs['IPADDR'].to_s
-+        pairs.delete('IPADDR')
-+    end
-+
-+    if (pairs.include? 'GATEWAY')
-+        pairs['IPV6_DEFAULTGW'] = pairs['GATEWAY']
-+        pairs.delete('GATEWAY')
-+    end
-+
-+    if (pairs['BOOTPROTO'].to_s == 'dhcp')
-+        pairs['DHCPV6C'] = 'yes'
-+        pairs['DHCLIENTARGS'] = '-1'
-+    end
-+    pairs
-+  end
-+
-   def self.header
-     str = <<-HEADER
- # HEADER: This file is is being managed by puppet. Changes to
diff --git a/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/route-options-support.patch b/meta-starlingx/meta-stx-cloud/recipes-support/puppet/files/puppet-network/route-options-support.patch
deleted file mode 100644 (file)
index 37bf138..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From c26a70ab9d5839f90148c578edc5d15133355194 Mon Sep 17 00:00:00 2001
-From: Kevin Smith <kevin.smith@windriver.com>
-Date: Wed, 25 Oct 2017 07:37:52 -0500
-Subject: [PATCH 1/1] route options support
-
----
- packstack/puppet/modules/network/lib/puppet/type/network_route.rb | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-index fd52c58..13ca06a 100644
---- a/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-+++ b/packstack/puppet/modules/network/lib/puppet/type/network_route.rb
-@@ -3,6 +3,11 @@ require 'ipaddr'
- Puppet::Type.newtype(:network_route) do
-   @doc = "Manage non-volatile route configuration information"
-+  feature :provider_options, <<-EOD
-+    The provider can accept an arbitrary options string. The semantics of
-+    these options will depend on the provider.
-+  EOD
-+
-   ensurable
-   newparam(:name) do
--- 
-1.8.3.1
-
index 3eb5463..bddadf3 100644 (file)
@@ -1,13 +1,19 @@
+inherit stx-metadata
+
+STX_REPO = "integ"
+STX_SUBPATH = "config/puppet-modules/${BPN}/centos/files"
+
+SRC_URI_STX += " \
+       file://puppet-network-Kilo-quilt-changes.patch;striplevel=5 \
+       file://puppet-network-support-ipv6.patch;striplevel=5 \
+       file://Don-t-write-absent-to-redhat-route-files-and-test-fo.patch;striplevel=5 \
+       file://fix-absent-options.patch;striplevel=5 \
+       file://permit-inservice-update-of-static-routes.patch;striplevel=5 \
+       file://ipv6-static-route-support.patch;striplevel=5 \
+       file://route-options-support.patch;striplevel=5 \
+       "
 
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
 SRC_URI += " \
-       file://${BPN}/puppet-network-Kilo-quilt-changes.patch;striplevel=5 \
-       file://${BPN}/puppet-network-support-ipv6.patch;striplevel=5 \
-       file://${BPN}/Don-t-write-absent-to-redhat-route-files-and-test-fo.patch;striplevel=5 \
-       file://${BPN}/fix-absent-options.patch;striplevel=5 \
-       file://${BPN}/permit-inservice-update-of-static-routes.patch;striplevel=5 \
-       file://${BPN}/ipv6-static-route-support.patch;striplevel=5 \
-       file://${BPN}/route-options-support.patch;striplevel=5 \
        file://${BPN}/0001-Stx-uses-puppet-boolean-instead-of-adrien-boolean.patch \
        file://${BPN}/puppet-network-updates-for-poky-stx.patch \
        file://${BPN}/puppet-network-config-poky-provider.patch \