From 38d40be9506b8167926426a78869bdbbd5b2d057 Mon Sep 17 00:00:00 2001 From: Luis Marquitti Date: Fri, 16 Jun 2023 12:10:37 -0300 Subject: [PATCH] Replace IPAddress gem with built-in IPAddr class During bootstrap, puppet throws a warning message that 'ipaddress gem was not found'. The puppet-network module uses the IPAddress gem to perform some validations. This gem can be replaced by the built-in class IPAddr and that way does not require the custom gem installation. This commit is sourced from a PR from the official repository of the puppet-network module: https://github.com/voxpupuli/puppet-network/pull/290 Test Plan: PASS: Build & Install PASS: AIO-SX & AIO-DX Successful Bootstrap PASS: AIO-SX & AIO-DX Successful Unlock PASS: Check that 'ipaddress gem not found' warning is no longer present on puppet.log Story: 2010757 Task: 48425 Change-Id: I1158628165ea62dc642a6a392a036f1d68b4a2cf Signed-off-by: Luis Marquitti --- ...dress-gem-with-built-in-IPAddr-class.patch | 139 ++++++++++++++++++ .../debian/deb_folder/patches/series | 1 + 2 files changed, 140 insertions(+) create mode 100644 config/puppet-modules/puppet-network/debian/deb_folder/patches/0008-Replace-IPAddress-gem-with-built-in-IPAddr-class.patch diff --git a/config/puppet-modules/puppet-network/debian/deb_folder/patches/0008-Replace-IPAddress-gem-with-built-in-IPAddr-class.patch b/config/puppet-modules/puppet-network/debian/deb_folder/patches/0008-Replace-IPAddress-gem-with-built-in-IPAddr-class.patch new file mode 100644 index 000000000..c342c5398 --- /dev/null +++ b/config/puppet-modules/puppet-network/debian/deb_folder/patches/0008-Replace-IPAddress-gem-with-built-in-IPAddr-class.patch @@ -0,0 +1,139 @@ +From cd56008065f243edad1b5637565572f766b28dea Mon Sep 17 00:00:00 2001 +From: Luis Marquitti +Date: Mon, 12 Jun 2023 18:25:11 -0300 +Subject: [PATCH] Replace IPAddress gem with built-in IPAddr class + +During bootstrap, puppet throws a warning message that 'ipaddress gem +was not found'. +The puppet-network module uses the IPAddress gem to perform some +validations. +This gem can be replaced by the built-in class IPAddr and that way does +not require the custom gem installation. + +Signed-off-by: Luis Marquitti +--- + README.md | 10 ++-------- + lib/puppet/type/network_config.rb | 22 ++++++++++++++++------ + manifests/init.pp | 12 +++++------- + 3 files changed, 23 insertions(+), 21 deletions(-) + +diff --git a/README.md b/README.md +index 2d1d6d0..2eaa0dd 100644 +--- a/README.md ++++ b/README.md +@@ -109,10 +109,8 @@ This module requires the FileMapper mixin, available at . + + The debian routes provider requires the package [ifupdown-extra](http://packages.debian.org/search?suite=all§ion=all&arch=any&searchon=names&keywords=ifupdown-extra). +-The `network_config` class requires the `ipaddress` gem, which needs to be +-installed on both the puppet master and the nodes. `ifupdown-extra` and +-`ipaddress` can be installed automatically using the `network` class. To use it, +-include it like so in your manifests: ++`ifupdown-extra` can be installed automatically using the `network` class. ++To use it, include it like so in your manifests: + + ```puppet + include '::network' +@@ -122,10 +120,6 @@ This class also provides fine-grained control over which packages to install and + how to install them. The documentation for the parameters exposed can be found + [here](https://github.com/voxpupuli/puppet-network/blob/master/manifests/init.pp). + +-The `ipaddress` gem can also be installed manually with: +- +- sudo gem install ipaddress --no-ri --no-rdoc +- + Note: you may also need to update your master's plugins (run on your puppet master): + + puppet agent -t --noop +diff --git a/lib/puppet/type/network_config.rb b/lib/puppet/type/network_config.rb +index e776617..9822c3b 100644 +--- a/lib/puppet/type/network_config.rb ++++ b/lib/puppet/type/network_config.rb +@@ -1,9 +1,9 @@ + require 'puppet/property/boolean' + + begin +- require 'ipaddress' ++ require 'ipaddr' + rescue LoadError +- Puppet.warning("#{__FILE__}:#{__LINE__}: ipaddress gem was not found") ++ Puppet.warning("#{__FILE__}:#{__LINE__}: ipaddr gem was not found") + end + + Puppet::Type.newtype(:network_config) do +@@ -31,9 +31,11 @@ Puppet::Type.newtype(:network_config) do + + newproperty(:ipaddress) do + desc 'The IP address of the network interfaces' +- if defined? IPAddress ++ if defined? IPAddr + validate do |value| +- raise ArgumentError, "#{self.class} requires a valid ipaddress for the ipaddress property" unless IPAddress.valid? value ++ IPAddr.new value ++ rescue IPAddr::InvalidAddressError ++ raise ArgumentError, "#{self.class} requires a valid ipaddress for the ipaddress property" + # provider.validate + end + end +@@ -41,9 +43,17 @@ Puppet::Type.newtype(:network_config) do + + newproperty(:netmask) do + desc 'The subnet mask to apply to the interface' +- if defined? IPAddress ++ if defined? IPAddr + validate do |value| +- raise ArgumentError, "#{self.class} requires a valid netmask for the netmask property" unless IPAddress.valid_ipv4_netmask? value ++ ipa = IPAddr.new '127.0.0.1' ++ ipa.mask(value) ++ rescue IPAddr::InvalidAddressError ++ begin ++ ipz = IPAddr.new '::1' ++ ipz.mask(value) ++ rescue IPAddr::InvalidAddressError ++ raise ArgumentError, "#{self.class} requires a valid netmask for the netmask property" ++ end + # provider.validate + end + end +diff --git a/manifests/init.pp b/manifests/init.pp +index 5465c58..03f736f 100644 +--- a/manifests/init.pp ++++ b/manifests/init.pp +@@ -48,12 +48,12 @@ + # + # [*ensure_ipaddress*] + # +-# What state the ifupdown-extra package should be in ++# What state the ipaddress package should be in + # +-# Default: present ++# Default: absent + # + +-class network( ++class network ( + $ifupdown_extra = 'ifupdown-extra', + $ifupdown_extra_provider = undef, + $manage_ifupdown_extra = true, +@@ -61,10 +61,9 @@ class network( + $ipaddress = 'ipaddress', + $ipaddress_provider = 'puppet_gem', + $manage_ipaddress = true, +- $ensure_ipaddress = present, ++ $ensure_ipaddress = absent, + ) { +- +- if $::osfamily == 'Debian' and $manage_ifupdown_extra { ++ if $facts['os']['family'] == 'Debian' and $manage_ifupdown_extra { + package { $ifupdown_extra: + ensure => $ensure_ifupdown_extra, + provider => $ifupdown_extra_provider, +@@ -79,5 +78,4 @@ class network( + } + Package[$ipaddress] -> Network_config <| |> + } +- + } +-- +2.25.1 + diff --git a/config/puppet-modules/puppet-network/debian/deb_folder/patches/series b/config/puppet-modules/puppet-network/debian/deb_folder/patches/series index b2ddc69fa..ddcc46094 100644 --- a/config/puppet-modules/puppet-network/debian/deb_folder/patches/series +++ b/config/puppet-modules/puppet-network/debian/deb_folder/patches/series @@ -5,3 +5,4 @@ 0005-Add-options-content-to-routes-file.patch 0006-Use-prefix_len-for-default-routes.patch 0007-Prevent-MTU-value-from-duplicating.patch +0008-Replace-IPAddress-gem-with-built-in-IPAddr-class.patch \ No newline at end of file