diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..9032a014a054849db4e22f22b6536cf92c7edd27
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+*.rb eol=lf
+*.erb eol=lf
+*.pp eol=lf
+*.sh eol=lf
+*.epp eol=lf
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 60feb1cd9965d3a065ad54d17b5940470730b2b2..b1ba1da7d5e317107bcba5c95013f6886bb66648 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -30,12 +30,12 @@ alma9-puppet-ci:
     CONTEXT_DIR: .
     DOCKER_FILE: ci/Dockerfile
     FROM:    gitlab-registry.cern.ch/linuxsupport/alma9-base
-    TO:      ${CI_REGISTRY_IMAGE}:alma9-puppet-ci-2.10.1
+    TO:      ${CI_REGISTRY_IMAGE}:alma9-puppet-ci-2.11.1
 
 
 .rake_template: &rake_template
   stage: tests
-  image: gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.10.1
+  image: gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.11.1
   artifacts:
     reports:
       junit: code/rspec*.xml
@@ -81,7 +81,7 @@ rubocop:
 
 yaml-validate:
   stage: tests
-  image: gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.10.1
+  image: gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.11.1
   script:
     - if [ -d data ] && [ -d code/data ] ; then echo "Directory data and code/data cannot both exist." ; /bin/false ; else true; fi
     - if [ -d data ] ; then yaml-lint data ; else true; fi
@@ -92,6 +92,6 @@ yaml-validate:
 
 rspec-unused:
   stage: tests
-  image: gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.10.1
+  image: gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.11.1
   script: /usr/bin/bash ci/extra-rspec-checks.sh
 
diff --git a/.msync.yml b/.msync.yml
index e8e87038374dbdb3baca9159b88023746f28db3f..52edd2aa3f257e386a54a07f46218b908ca4c75a 100644
--- a/.msync.yml
+++ b/.msync.yml
@@ -1 +1 @@
-modulesync_config_version: '2.10.1'
+modulesync_config_version: '2.11.1'
diff --git a/Dockerfile b/Dockerfile
index c898686f14789fbe8807f6121e0dcac7bfefce4a..44f884e2225fc553d3ddf3bf71e775223bfbcc3a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,7 +13,7 @@
 # podman build --build-arg GITLAB_ACCESS_TOKEN=<your_token> --build-arg SPEC=spec/defines/alias_spec.rb  .
 #
 #
-FROM gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.10.1
+FROM gitlab-registry.cern.ch/ai/it-puppet-module-ci_images:alma9-puppet-ci-2.11.1
 
 WORKDIR /opt/puppet
 
diff --git a/ci/Gemfile b/ci/Gemfile
index fbf6c3ea59d1f39dc142dca2ff6063c67525a1f7..24d7a8c139a6c4a48009efc977b5d4edb3050020 100644
--- a/ci/Gemfile
+++ b/ci/Gemfile
@@ -11,8 +11,9 @@ def location_for(place, fake_version = nil)
 end
 
 group :test do
-  gem 'voxpupuli-test', '~> 7.0',   :require => false
-  gem 'puppet_metadata', '~> 3.0',  :require => false
+  gem 'voxpupuli-test', '~> 9.0',   :require => false if RUBY_VERSION >= '3.0'
+  gem 'voxpupuli-test', '~> 7.0',   :require => false if RUBY_VERSION <= '3.0'
+  gem 'puppet_metadata', '~> 4.0',  :require => false
   gem 'puppet-pson',                :require => false if RUBY_VERSION >= '3.0'
   gem 'coveralls',                  :require => false
   gem 'simplecov-console',          :require => false
diff --git a/ci/boilerplate/spec/classes/init_spec.rb b/ci/boilerplate/spec/classes/init_spec.rb
index 412bd45efbf599ab69d02ec3838f27fdf6aed861..4e256d4e40b9c5124c6b9389e7c5ca6272c53dcf 100644
--- a/ci/boilerplate/spec/classes/init_spec.rb
+++ b/ci/boilerplate/spec/classes/init_spec.rb
@@ -20,8 +20,8 @@ describe 'dirac' do
       let(:facts) do
         facts
       end
-      case facts[:operatingsystemmajrelease]
-      when '5'
+      case facts[:os]['release']['major']
+      when '8'
         it { is_expected.to compile.with_all_deps }
         # it { is_expected.to contain_file('/tmp/abc') }
       else
diff --git a/ci/boilerplate/spec/defines/mytype_spec.rb b/ci/boilerplate/spec/defines/mytype_spec.rb
index c9b28abca3621957341445f1856de745e720ee51..8047b0a9e8aeab45dd485c5cda43bb878e71cd9e 100644
--- a/ci/boilerplate/spec/defines/mytype_spec.rb
+++ b/ci/boilerplate/spec/defines/mytype_spec.rb
@@ -21,8 +21,8 @@ describe 'dirac::mytype' do
       let(:facts) do
         facts
       end
-      case facts[:operatingsystemmajrelease]
-      when '5'
+      case facts[:os]['release']['major']
+      when '8'
         it { is_expected.to compile.with_all_deps }
         # it { is_expected.to contain_file('/tmp/abc') }
       else