diff --git a/.gitignore b/.gitignore
index a9965320a67cf67e14f5bfa41aaf270ebbd32906..c817477a0aea992fe70e44977a62078cc9310079 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,7 @@
 /log/
 /pkg/
 /spec/fixtures/manifests/
-/spec/fixtures/modules/
+/spec/fixtures/modules/*
 /tmp/
 /vendor/
 /convert_report.txt
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d49a282204f95e69b20f82be215ceefc76129d11..97ebb8b9fc3bcad7a221e5c224f28e468c01a780 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,3 +2,7 @@
 include:
   - project: 'puppet-infra/shared-ci-piplines'
     file: '/puppet-module-pipeline.yaml'
+  - local: .local-ci.yml
+    rules:
+      - exists:
+          - .local-ci.yml
diff --git a/.pdkignore b/.pdkignore
index f96299629ecb210a0cdd0fdb38a4b955515392d6..8bbed40cca2034410bafc4820c5887a849bdf48d 100644
--- a/.pdkignore
+++ b/.pdkignore
@@ -16,7 +16,7 @@
 /log/
 /pkg/
 /spec/fixtures/manifests/
-/spec/fixtures/modules/
+/spec/fixtures/modules/*
 /tmp/
 /vendor/
 /convert_report.txt
@@ -29,20 +29,17 @@
 *~
 \#*\#
 .\#*
-/appveyor.yml
-/.editorconfig
 /.fixtures.yml
 /Gemfile
 /.gitattributes
+/.github/
 /.gitignore
-/.gitlab-ci.yml
 /.pdkignore
 /.puppet-lint.rc
 /Rakefile
 /rakelib/
 /.rspec
-/.rubocop.yml
-/.travis.yml
+/..yml
 /.yardopts
 /spec/
 /.vscode/
diff --git a/.rubocop.yml b/.rubocop.yml
index 31e8248ff813e956702d5c67844aeb0e2affc917..5be1f9fa994085890c3fe9db117a937b8928f8cb 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -4,7 +4,7 @@ require:
 - rubocop-rspec
 AllCops:
   DisplayCopNames: true
-  TargetRubyVersion: '2.5'
+  TargetRubyVersion: '2.6'
   Include:
   - "**/*.rb"
   Exclude:
@@ -111,8 +111,14 @@ Style/MethodCalledOnDoEndBlock:
   Enabled: true
 Style/StringMethods:
   Enabled: true
+Bundler/GemFilename:
+  Enabled: false
 Bundler/InsecureProtocolSource:
   Enabled: false
+Capybara/CurrentPathExpectation:
+  Enabled: false
+Capybara/VisibilityMatcher:
+  Enabled: false
 Gemspec/DuplicatedAssignment:
   Enabled: false
 Gemspec/OrderedDependencies:
@@ -287,11 +293,9 @@ Performance/UriDefaultParser:
   Enabled: false
 RSpec/Be:
   Enabled: false
-RSpec/Capybara/CurrentPathExpectation:
-  Enabled: false
 RSpec/Capybara/FeatureMethods:
   Enabled: false
-RSpec/Capybara/VisibilityMatcher:
+RSpec/ContainExactly:
   Enabled: false
 RSpec/ContextMethod:
   Enabled: false
@@ -331,6 +335,8 @@ RSpec/LeakyConstantDeclaration:
   Enabled: false
 RSpec/LetBeforeExamples:
   Enabled: false
+RSpec/MatchArray:
+  Enabled: false
 RSpec/MissingExampleGroupArgument:
   Enabled: false
 RSpec/MultipleExpectations:
@@ -373,8 +379,6 @@ Style/AccessModifierDeclarations:
   Enabled: false
 Style/AccessorGrouping:
   Enabled: false
-Style/AsciiComments:
-  Enabled: false
 Style/BisectedAttrAccessor:
   Enabled: false
 Style/CaseLikeIf:
@@ -485,35 +489,235 @@ Style/TrailingMethodEndStatement:
   Enabled: false
 Style/UnpackFirst:
   Enabled: false
+Capybara/MatchStyle:
+  Enabled: false
+Capybara/NegationMatcher:
+  Enabled: false
+Capybara/SpecificActions:
+  Enabled: false
+Capybara/SpecificFinders:
+  Enabled: false
+Capybara/SpecificMatcher:
+  Enabled: false
+Gemspec/DeprecatedAttributeAssignment:
+  Enabled: false
+Gemspec/DevelopmentDependencies:
+  Enabled: false
+Gemspec/RequireMFA:
+  Enabled: false
+Layout/LineContinuationLeadingSpace:
+  Enabled: false
+Layout/LineContinuationSpacing:
+  Enabled: false
+Layout/LineEndStringConcatenationIndentation:
+  Enabled: false
+Layout/SpaceBeforeBrackets:
+  Enabled: false
+Lint/AmbiguousAssignment:
+  Enabled: false
+Lint/AmbiguousOperatorPrecedence:
+  Enabled: false
+Lint/AmbiguousRange:
+  Enabled: false
+Lint/ConstantOverwrittenInRescue:
+  Enabled: false
+Lint/DeprecatedConstants:
+  Enabled: false
 Lint/DuplicateBranch:
   Enabled: false
+Lint/DuplicateMagicComment:
+  Enabled: false
 Lint/DuplicateRegexpCharacterClassElement:
   Enabled: false
 Lint/EmptyBlock:
   Enabled: false
 Lint/EmptyClass:
   Enabled: false
+Lint/EmptyInPattern:
+  Enabled: false
+Lint/IncompatibleIoSelectWithFiberScheduler:
+  Enabled: false
+Lint/LambdaWithoutLiteralBlock:
+  Enabled: false
 Lint/NoReturnInBeginEndBlocks:
   Enabled: false
+Lint/NonAtomicFileOperation:
+  Enabled: false
+Lint/NumberedParameterAssignment:
+  Enabled: false
+Lint/OrAssignmentToConstant:
+  Enabled: false
+Lint/RedundantDirGlobSort:
+  Enabled: false
+Lint/RefinementImportMethods:
+  Enabled: false
+Lint/RequireRangeParentheses:
+  Enabled: false
+Lint/RequireRelativeSelfPath:
+  Enabled: false
+Lint/SymbolConversion:
+  Enabled: false
 Lint/ToEnumArguments:
   Enabled: false
+Lint/TripleQuotes:
+  Enabled: false
 Lint/UnexpectedBlockArity:
   Enabled: false
 Lint/UnmodifiedReduceAccumulator:
   Enabled: false
+Lint/UselessRescue:
+  Enabled: false
+Lint/UselessRuby2Keywords:
+  Enabled: false
+Metrics/CollectionLiteralLength:
+  Enabled: false
+Naming/BlockForwarding:
+  Enabled: false
 Performance/CollectionLiteralInLoop:
   Enabled: false
+Performance/ConcurrentMonotonicTime:
+  Enabled: false
+Performance/MapCompact:
+  Enabled: false
+Performance/RedundantEqualityComparisonBlock:
+  Enabled: false
+Performance/RedundantSplitRegexpArgument:
+  Enabled: false
+Performance/StringIdentifierArgument:
+  Enabled: false
+RSpec/BeEq:
+  Enabled: false
+RSpec/BeNil:
+  Enabled: false
+RSpec/ChangeByZero:
+  Enabled: false
+RSpec/ClassCheck:
+  Enabled: false
+RSpec/DuplicatedMetadata:
+  Enabled: false
+RSpec/ExcessiveDocstringSpacing:
+  Enabled: false
+RSpec/FactoryBot/ConsistentParenthesesStyle:
+  Enabled: false
+RSpec/FactoryBot/FactoryNameStyle:
+  Enabled: false
+RSpec/FactoryBot/SyntaxMethods:
+  Enabled: false
+RSpec/IdenticalEqualityAssertion:
+  Enabled: false
+RSpec/NoExpectationExample:
+  Enabled: false
+RSpec/PendingWithoutReason:
+  Enabled: false
+RSpec/Rails/AvoidSetupHook:
+  Enabled: false
+RSpec/Rails/HaveHttpStatus:
+  Enabled: false
+RSpec/Rails/InferredSpecType:
+  Enabled: false
+RSpec/Rails/MinitestAssertions:
+  Enabled: false
+RSpec/Rails/TravelAround:
+  Enabled: false
+RSpec/RedundantAround:
+  Enabled: false
+RSpec/SkipBlockInsideExample:
+  Enabled: false
+RSpec/SortMetadata:
+  Enabled: false
+RSpec/SubjectDeclaration:
+  Enabled: false
+RSpec/VerifiedDoubleReference:
+  Enabled: false
+Security/CompoundHash:
+  Enabled: false
+Security/IoMethods:
+  Enabled: false
 Style/ArgumentsForwarding:
   Enabled: false
+Style/ArrayIntersect:
+  Enabled: false
 Style/CollectionCompact:
   Enabled: false
+Style/ComparableClamp:
+  Enabled: false
+Style/ConcatArrayLiterals:
+  Enabled: false
+Style/DirEmpty:
+  Enabled: false
 Style/DocumentDynamicEvalDefinition:
   Enabled: false
+Style/EmptyHeredoc:
+  Enabled: false
+Style/EndlessMethod:
+  Enabled: false
+Style/EnvHome:
+  Enabled: false
+Style/FetchEnvVar:
+  Enabled: false
+Style/FileEmpty:
+  Enabled: false
+Style/FileRead:
+  Enabled: false
+Style/FileWrite:
+  Enabled: false
+Style/HashConversion:
+  Enabled: false
+Style/HashExcept:
+  Enabled: false
+Style/IfWithBooleanLiteralBranches:
+  Enabled: false
+Style/InPatternThen:
+  Enabled: false
+Style/MagicCommentFormat:
+  Enabled: false
+Style/MapCompactWithConditionalBlock:
+  Enabled: false
+Style/MapToHash:
+  Enabled: false
+Style/MapToSet:
+  Enabled: false
+Style/MinMaxComparison:
+  Enabled: false
+Style/MultilineInPatternThen:
+  Enabled: false
 Style/NegatedIfElseCondition:
   Enabled: false
+Style/NestedFileDirname:
+  Enabled: false
 Style/NilLambda:
   Enabled: false
+Style/NumberedParameters:
+  Enabled: false
+Style/NumberedParametersLimit:
+  Enabled: false
+Style/ObjectThen:
+  Enabled: false
+Style/OpenStructUse:
+  Enabled: false
+Style/OperatorMethodCall:
+  Enabled: false
+Style/QuotedSymbols:
+  Enabled: false
 Style/RedundantArgument:
   Enabled: false
+Style/RedundantConstantBase:
+  Enabled: false
+Style/RedundantDoubleSplatHashBraces:
+  Enabled: false
+Style/RedundantEach:
+  Enabled: false
+Style/RedundantHeredocDelimiterQuotes:
+  Enabled: false
+Style/RedundantInitialize:
+  Enabled: false
+Style/RedundantSelfAssignmentBranch:
+  Enabled: false
+Style/RedundantStringEscape:
+  Enabled: false
+Style/SelectByRegexp:
+  Enabled: false
+Style/StringChars:
+  Enabled: false
 Style/SwapValues:
   Enabled: false
diff --git a/Gemfile b/Gemfile
index db6f7dde5ff2abe1653122bcfdb98c2b1375d431..ca0e773ecda0523822c56f423572a35d57d7ed83 100644
--- a/Gemfile
+++ b/Gemfile
@@ -13,29 +13,37 @@ def location_for(place_or_version, fake_version = nil)
   end
 end
 
-ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
-minor_version = ruby_version_segments[0..1].join('.')
-
 group :development do
-  gem "json", '= 2.0.4',                                         require: false if Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
-  gem "json", '= 2.1.0',                                         require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
-  gem "json", '= 2.3.0',                                         require: false if Gem::Requirement.create(['>= 2.7.0', '< 2.8.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
-  gem "puppet-module-posix-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
-  gem "puppet-module-posix-dev-r#{minor_version}", '~> 1.0',     require: false, platforms: [:ruby]
-  gem "puppet-module-win-default-r#{minor_version}", '~> 1.0',   require: false, platforms: [:mswin, :mingw, :x64_mingw]
-  gem "puppet-module-win-dev-r#{minor_version}", '~> 1.0',       require: false, platforms: [:mswin, :mingw, :x64_mingw]
-  gem "voxpupuli-puppet-lint-plugins", '>= 3.0',                 require: false
-  gem "puppet-lint-absolute_classname-check", '>= 3.0.1',        require: false
-  gem "puppet-lint-absolute_template_path", '>= 1.0.1',          require: false
-  gem "puppet-lint-empty_trailing_lines", '>= 0.0.1',            require: false
-  gem "puppet-lint-file_ensure-check", '>= 1.0.0',               require: false
-  gem "puppet-lint-strict_indent-check", '>= 2.0.8',             require: false
-  gem "puppet-lint-trailing_comma-check", '>= 0.4.3',            require: false
-  gem "puppet-lint-unquoted_string-check", '>= 2.1.0',           require: false
+  gem "json", '= 2.1.0',                         require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+  gem "json", '= 2.3.0',                         require: false if Gem::Requirement.create(['>= 2.7.0', '< 3.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+  gem "json", '= 2.5.1',                         require: false if Gem::Requirement.create(['>= 3.0.0', '< 3.0.5']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+  gem "json", '= 2.6.1',                         require: false if Gem::Requirement.create(['>= 3.1.0', '< 3.1.3']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+  gem "json", '= 2.6.3',                         require: false if Gem::Requirement.create(['>= 3.2.0', '< 4.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+  gem "racc", '~> 1.4.0',                        require: false if Gem::Requirement.create(['>= 2.7.0', '< 3.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+  gem "voxpupuli-puppet-lint-plugins", '~> 5.0', require: false
+  gem "facterdb", '~> 1.18',                     require: false
+  gem "metadata-json-lint", '~> 3.0',            require: false
+  gem "puppetlabs_spec_helper", '~> 6.0',        require: false
+  gem "rspec-puppet-facts", '~> 2.0',            require: false
+  gem "codecov", '~> 0.2',                       require: false
+  gem "dependency_checker", '~> 1.0.0',          require: false
+  gem "parallel_tests", '= 3.12.1',              require: false
+  gem "pry", '~> 0.10',                          require: false
+  gem "simplecov-console", '~> 0.5',             require: false
+  gem "puppet-debugger", '~> 1.0',               require: false
+  gem "rubocop", '= 1.48.1',                     require: false
+  gem "rubocop-performance", '= 1.16.0',         require: false
+  gem "rubocop-rspec", '= 2.19.0',               require: false
+  gem "puppet-strings", '~> 4.0',                require: false
+  gem "rb-readline", '= 0.5.5',                  require: false, platforms: [:mswin, :mingw, :x64_mingw]
 end
 group :system_tests do
-  gem "puppet-module-posix-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
-  gem "puppet-module-win-system-r#{minor_version}", '~> 1.0',   require: false, platforms: [:mswin, :mingw, :x64_mingw]
+  gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw]
+  gem "serverspec", '~> 2.41',   require: false
+end
+group :release_prep do
+  gem "puppet-strings", '~> 4.0',         require: false
+  gem "puppetlabs_spec_helper", '~> 6.0', require: false
 end
 
 puppet_version = ENV['PUPPET_GEM_VERSION']
diff --git a/Rakefile b/Rakefile
index 0f8754eb61e400db1d117cad5026f06d3ba6ff89..74415a96f53d00b92550f6c697bb02093faecf76 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,12 +1,11 @@
 # frozen_string_literal: true
 
 require 'bundler'
-require 'puppet_litmus/rake_tasks' if Bundler.rubygems.find_name('puppet_litmus').any?
+require 'puppet_litmus/rake_tasks' if Gem.loaded_specs.key? 'puppet_litmus'
 require 'puppetlabs_spec_helper/rake_tasks'
 require 'puppet-syntax/tasks/puppet-syntax'
-require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
-require 'github_changelog_generator/task' if Bundler.rubygems.find_name('github_changelog_generator').any?
-require 'puppet-strings/tasks' if Bundler.rubygems.find_name('puppet-strings').any?
+require 'github_changelog_generator/task' if Gem.loaded_specs.key? 'github_changelog_generator'
+require 'puppet-strings/tasks' if Gem.loaded_specs.key? 'puppet-strings'
 
 def changelog_user
   return unless Rake.application.top_level_tasks.include? "changelog"
@@ -44,7 +43,7 @@ end
 PuppetLint.configuration.send('disable_relative')
 
 
-if Bundler.rubygems.find_name('github_changelog_generator').any?
+if Gem.loaded_specs.key? 'github_changelog_generator'
   GitHubChangelogGenerator::RakeTask.new :changelog do |config|
     raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'" if Rake.application.top_level_tasks.include? "changelog" and ENV['CHANGELOG_GITHUB_TOKEN'].nil?
     config.user = "#{changelog_user}"
diff --git a/manifests/init.pp b/manifests/init.pp
index 8d8a416a52e4f07d94fe71bcc582c14ac904b6e9..b0499e80384d81108b2ee348791f751f08622160 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -45,23 +45,28 @@ class aim_control (
       shell      => '/bin/bash',
       sshkey     => 'AAAAB3NzaC1yc2EAAAADAQABAAACAQDGB+/wkuPKTSY6pGSnuJNWt2vDq0hqwZrcuhtrHRz06gjzk2YbmJ7qxkDrwpicskreaqVzcWAP6VqUbhYREiCr7BB2X3AOSW6pyKH2nqTThfZ58IyfXv0SqJowUDRju+jzPTXxrl78YsoYGY108mYa3HeoG3N1QM6PSpuHskMctFyKa3DB1MkQGeywVx2Nen5dTE3MvU8jnnEDyqLe9FfHHOTGNGoToP6GcMfCxSwPI6PrAbzQcptdLTSDEs7tz8iMXtNaDGP/BgGxKwGWWeuOC1XvLMD0iGTIY/PVPH5owqX2UNT4AulyqRO+K3T2i2+sBg42QtqSBrg1Ih7/1C4yrjvqKqWcc/LQw6t+bu1Gjplahv/aW6QWX95R2eO7tdFfr4fAiOhh7rKOJY95xa8/9yEgO69P2rSf/BSpOP8wwYX8nLg7m8VKOcUfNCFdU6lEbnoGwKjkdn8xmDbswivzW7td0NOHKkUU+kIvMmvEbpDsYBuaJ4xrr3YTSBz7CGmaVaanTB8hxL7J+cN5uMix0My9mVo6iaWAIyDPGGlAZ/vZxAel6rDcOcEBwJXbLxTkI494Vtd0wF6DIvs9jDbGrd0+rnjLtOiyWGVIhI4YusnEj0P6mv7dEDF0kLoxbUHBZpYRK+iypRqp9/WxCGQVCnDJJfRHRowbsFl8Withyw==', # lint:ignore:140chars
       client     => ['192.168.0.32'];
+
+    'sagno626':
+      commonname => 'Saga Noren Karlsson',
+      shell      => '/bin/bash',
+      sshkey     => 'AAAAB3NzaC1yc2EAAAADAQABAAABgQCauuRZ152TqWqd+d9zmXvZv9ybZEQ1J0Mld0i4N897lq/LwqGj88tPJnNaTcdpOA/+vsN8mdx9gPITBhzTiuZXT2dMc0weo9psgs+QajpdvOXN4/vIg6WU2dXxpm1Y4QeeiLlDTDflV6g1BQIQP50jJcoKSOT1kfnH69Kic8C72ymey1qBLvDb8UNYAJXYrWEY/tkPUo9T28+LA+lGeJ5bwjXzK1XL63PZiW8UMQHx6Bj+wrQnz1mjlVco/BNSnQZXoKNCpSMmnvl1sGNP7ZsdtJ0/VGgMefIsO+ArISyk37sAZTj0Q+2lgBtt49ovnBZZ/tYvZzxndB/jEFPfjPnr/V3jmKbQD5vI7K7uE4ROgqFCNW4wgqBtP5H/UGwIb3uXpYizK3XKjlyE7iRfxPylgjmUbQbNaYlA9WqbKmow4b/Iv3cD+09VZ1rS5w6qgQtxl5Kf+FfWTwRKQS6mlEsnUtpnslfhp4+uBSMNLBdhK2hH7srRvaY7zpXJ/hkQqgM='; # lint:ignore:140chars
   }
 
   file { '/etc/sudoers.d/02-serious_sam' :
     ensure  => 'file',
     owner   => 'root',
     mode    => '0660',
-    content => 'samla949 ALL=(ALL) NOPASSWD: ALL',
+    content => 'sagno626 ALL=(ALL) ALL',
   }
 
   group { 'skadereg':
     ensure  => present,
     members => [
-      'samla949',
+      'sagno626',
       'apache',
     ],
     require => [
-      Users::Liu_user['samla949'],
+      Users::Liu_user['sagno626'],
     ],
   }
 
diff --git a/manifests/update_report.txt b/manifests/update_report.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e37d83ab35f8a3034ad5ae80b04c2e812278ae0b
--- /dev/null
+++ b/manifests/update_report.txt
@@ -0,0 +1,493 @@
+/* Report generated by PDK at 2024-05-07 18:00:36 +0200 */
+
+
+--- /home/nilpa76/user-repos/aim_control/metadata.json	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/metadata.json.pdknew	2024-05-07 18:00:36.727243586 +0200
+@@ -61,8 +61,8 @@
+       "version_requirement": ">= 6.21.0 < 8.0.0"
+     }
+   ],
+-  "pdk-version": "2.5.0",
++  "pdk-version": "3.0.1",
+   "template-url": "https://gitlab.it.liu.se/puppet-infra/pdk-templates.git#liu",
+-  "template-ref": "heads/liu-0-g3298fb5"
++  "template-ref": "heads/liu-0-g522eb00"
+ }
+
+
+--- /home/nilpa76/user-repos/aim_control/.gitignore	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/.gitignore.pdknew	2024-05-07 18:00:36.727697003 +0200
+@@ -16,7 +16,7 @@
+ /log/
+ /pkg/
+ /spec/fixtures/manifests/
+-/spec/fixtures/modules/
++/spec/fixtures/modules/*
+ /tmp/
+ /vendor/
+ /convert_report.txt
+
+
+--- /home/nilpa76/user-repos/aim_control/.gitlab-ci.yml	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/.gitlab-ci.yml.pdknew	2024-05-07 18:00:36.727808772 +0200
+@@ -2,4 +2,8 @@
+ include:
+   - project: 'puppet-infra/shared-ci-piplines'
+     file: '/puppet-module-pipeline.yaml'
++  - local: .local-ci.yml
++    rules:
++      - exists:
++          - .local-ci.yml
+
+
+--- /home/nilpa76/user-repos/aim_control/.pdkignore	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/.pdkignore.pdknew	2024-05-07 18:00:36.728378355 +0200
+@@ -16,7 +16,7 @@
+ /log/
+ /pkg/
+ /spec/fixtures/manifests/
+-/spec/fixtures/modules/
++/spec/fixtures/modules/*
+ /tmp/
+ /vendor/
+ /convert_report.txt
+@@ -29,20 +29,17 @@
+ *~
+ \#*\#
+ .\#*
+-/appveyor.yml
+-/.editorconfig
+ /.fixtures.yml
+ /Gemfile
+ /.gitattributes
++/.github/
+ /.gitignore
+-/.gitlab-ci.yml
+ /.pdkignore
+ /.puppet-lint.rc
+ /Rakefile
+ /rakelib/
+ /.rspec
+-/.rubocop.yml
+-/.travis.yml
++/..yml
+ /.yardopts
+ /spec/
+ /.vscode/
+
+
+--- /home/nilpa76/user-repos/aim_control/.rubocop.yml	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/.rubocop.yml.pdknew	2024-05-07 18:00:36.760334245 +0200
+@@ -4,7 +4,7 @@
+ - rubocop-rspec
+ AllCops:
+   DisplayCopNames: true
+-  TargetRubyVersion: '2.5'
++  TargetRubyVersion: '2.6'
+   Include:
+   - "**/*.rb"
+   Exclude:
+@@ -111,8 +111,14 @@
+   Enabled: true
+ Style/StringMethods:
+   Enabled: true
++Bundler/GemFilename:
++  Enabled: false
+ Bundler/InsecureProtocolSource:
+   Enabled: false
++Capybara/CurrentPathExpectation:
++  Enabled: false
++Capybara/VisibilityMatcher:
++  Enabled: false
+ Gemspec/DuplicatedAssignment:
+   Enabled: false
+ Gemspec/OrderedDependencies:
+@@ -287,11 +293,9 @@
+   Enabled: false
+ RSpec/Be:
+   Enabled: false
+-RSpec/Capybara/CurrentPathExpectation:
+-  Enabled: false
+ RSpec/Capybara/FeatureMethods:
+   Enabled: false
+-RSpec/Capybara/VisibilityMatcher:
++RSpec/ContainExactly:
+   Enabled: false
+ RSpec/ContextMethod:
+   Enabled: false
+@@ -331,6 +335,8 @@
+   Enabled: false
+ RSpec/LetBeforeExamples:
+   Enabled: false
++RSpec/MatchArray:
++  Enabled: false
+ RSpec/MissingExampleGroupArgument:
+   Enabled: false
+ RSpec/MultipleExpectations:
+@@ -373,8 +379,6 @@
+   Enabled: false
+ Style/AccessorGrouping:
+   Enabled: false
+-Style/AsciiComments:
+-  Enabled: false
+ Style/BisectedAttrAccessor:
+   Enabled: false
+ Style/CaseLikeIf:
+@@ -485,35 +489,235 @@
+   Enabled: false
+ Style/UnpackFirst:
+   Enabled: false
++Capybara/MatchStyle:
++  Enabled: false
++Capybara/NegationMatcher:
++  Enabled: false
++Capybara/SpecificActions:
++  Enabled: false
++Capybara/SpecificFinders:
++  Enabled: false
++Capybara/SpecificMatcher:
++  Enabled: false
++Gemspec/DeprecatedAttributeAssignment:
++  Enabled: false
++Gemspec/DevelopmentDependencies:
++  Enabled: false
++Gemspec/RequireMFA:
++  Enabled: false
++Layout/LineContinuationLeadingSpace:
++  Enabled: false
++Layout/LineContinuationSpacing:
++  Enabled: false
++Layout/LineEndStringConcatenationIndentation:
++  Enabled: false
++Layout/SpaceBeforeBrackets:
++  Enabled: false
++Lint/AmbiguousAssignment:
++  Enabled: false
++Lint/AmbiguousOperatorPrecedence:
++  Enabled: false
++Lint/AmbiguousRange:
++  Enabled: false
++Lint/ConstantOverwrittenInRescue:
++  Enabled: false
++Lint/DeprecatedConstants:
++  Enabled: false
+ Lint/DuplicateBranch:
+   Enabled: false
++Lint/DuplicateMagicComment:
++  Enabled: false
+ Lint/DuplicateRegexpCharacterClassElement:
+   Enabled: false
+ Lint/EmptyBlock:
+   Enabled: false
+ Lint/EmptyClass:
+   Enabled: false
++Lint/EmptyInPattern:
++  Enabled: false
++Lint/IncompatibleIoSelectWithFiberScheduler:
++  Enabled: false
++Lint/LambdaWithoutLiteralBlock:
++  Enabled: false
+ Lint/NoReturnInBeginEndBlocks:
+   Enabled: false
++Lint/NonAtomicFileOperation:
++  Enabled: false
++Lint/NumberedParameterAssignment:
++  Enabled: false
++Lint/OrAssignmentToConstant:
++  Enabled: false
++Lint/RedundantDirGlobSort:
++  Enabled: false
++Lint/RefinementImportMethods:
++  Enabled: false
++Lint/RequireRangeParentheses:
++  Enabled: false
++Lint/RequireRelativeSelfPath:
++  Enabled: false
++Lint/SymbolConversion:
++  Enabled: false
+ Lint/ToEnumArguments:
+   Enabled: false
++Lint/TripleQuotes:
++  Enabled: false
+ Lint/UnexpectedBlockArity:
+   Enabled: false
+ Lint/UnmodifiedReduceAccumulator:
+   Enabled: false
++Lint/UselessRescue:
++  Enabled: false
++Lint/UselessRuby2Keywords:
++  Enabled: false
++Metrics/CollectionLiteralLength:
++  Enabled: false
++Naming/BlockForwarding:
++  Enabled: false
+ Performance/CollectionLiteralInLoop:
+   Enabled: false
++Performance/ConcurrentMonotonicTime:
++  Enabled: false
++Performance/MapCompact:
++  Enabled: false
++Performance/RedundantEqualityComparisonBlock:
++  Enabled: false
++Performance/RedundantSplitRegexpArgument:
++  Enabled: false
++Performance/StringIdentifierArgument:
++  Enabled: false
++RSpec/BeEq:
++  Enabled: false
++RSpec/BeNil:
++  Enabled: false
++RSpec/ChangeByZero:
++  Enabled: false
++RSpec/ClassCheck:
++  Enabled: false
++RSpec/DuplicatedMetadata:
++  Enabled: false
++RSpec/ExcessiveDocstringSpacing:
++  Enabled: false
++RSpec/FactoryBot/ConsistentParenthesesStyle:
++  Enabled: false
++RSpec/FactoryBot/FactoryNameStyle:
++  Enabled: false
++RSpec/FactoryBot/SyntaxMethods:
++  Enabled: false
++RSpec/IdenticalEqualityAssertion:
++  Enabled: false
++RSpec/NoExpectationExample:
++  Enabled: false
++RSpec/PendingWithoutReason:
++  Enabled: false
++RSpec/Rails/AvoidSetupHook:
++  Enabled: false
++RSpec/Rails/HaveHttpStatus:
++  Enabled: false
++RSpec/Rails/InferredSpecType:
++  Enabled: false
++RSpec/Rails/MinitestAssertions:
++  Enabled: false
++RSpec/Rails/TravelAround:
++  Enabled: false
++RSpec/RedundantAround:
++  Enabled: false
++RSpec/SkipBlockInsideExample:
++  Enabled: false
++RSpec/SortMetadata:
++  Enabled: false
++RSpec/SubjectDeclaration:
++  Enabled: false
++RSpec/VerifiedDoubleReference:
++  Enabled: false
++Security/CompoundHash:
++  Enabled: false
++Security/IoMethods:
++  Enabled: false
+ Style/ArgumentsForwarding:
+   Enabled: false
++Style/ArrayIntersect:
++  Enabled: false
+ Style/CollectionCompact:
+   Enabled: false
++Style/ComparableClamp:
++  Enabled: false
++Style/ConcatArrayLiterals:
++  Enabled: false
++Style/DirEmpty:
++  Enabled: false
+ Style/DocumentDynamicEvalDefinition:
+   Enabled: false
++Style/EmptyHeredoc:
++  Enabled: false
++Style/EndlessMethod:
++  Enabled: false
++Style/EnvHome:
++  Enabled: false
++Style/FetchEnvVar:
++  Enabled: false
++Style/FileEmpty:
++  Enabled: false
++Style/FileRead:
++  Enabled: false
++Style/FileWrite:
++  Enabled: false
++Style/HashConversion:
++  Enabled: false
++Style/HashExcept:
++  Enabled: false
++Style/IfWithBooleanLiteralBranches:
++  Enabled: false
++Style/InPatternThen:
++  Enabled: false
++Style/MagicCommentFormat:
++  Enabled: false
++Style/MapCompactWithConditionalBlock:
++  Enabled: false
++Style/MapToHash:
++  Enabled: false
++Style/MapToSet:
++  Enabled: false
++Style/MinMaxComparison:
++  Enabled: false
++Style/MultilineInPatternThen:
++  Enabled: false
+ Style/NegatedIfElseCondition:
+   Enabled: false
++Style/NestedFileDirname:
++  Enabled: false
+ Style/NilLambda:
+   Enabled: false
++Style/NumberedParameters:
++  Enabled: false
++Style/NumberedParametersLimit:
++  Enabled: false
++Style/ObjectThen:
++  Enabled: false
++Style/OpenStructUse:
++  Enabled: false
++Style/OperatorMethodCall:
++  Enabled: false
++Style/QuotedSymbols:
++  Enabled: false
+ Style/RedundantArgument:
++  Enabled: false
++Style/RedundantConstantBase:
++  Enabled: false
++Style/RedundantDoubleSplatHashBraces:
++  Enabled: false
++Style/RedundantEach:
++  Enabled: false
++Style/RedundantHeredocDelimiterQuotes:
++  Enabled: false
++Style/RedundantInitialize:
++  Enabled: false
++Style/RedundantSelfAssignmentBranch:
++  Enabled: false
++Style/RedundantStringEscape:
++  Enabled: false
++Style/SelectByRegexp:
++  Enabled: false
++Style/StringChars:
+   Enabled: false
+ Style/SwapValues:
+   Enabled: false
+
+
+--- /home/nilpa76/user-repos/aim_control/Gemfile	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/Gemfile.pdknew	2024-05-07 18:00:36.761486068 +0200
+@@ -13,29 +13,37 @@
+   end
+ end
+ 
+-ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
+-minor_version = ruby_version_segments[0..1].join('.')
+-
+ group :development do
+-  gem "json", '= 2.0.4',                                         require: false if Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+-  gem "json", '= 2.1.0',                                         require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+-  gem "json", '= 2.3.0',                                         require: false if Gem::Requirement.create(['>= 2.7.0', '< 2.8.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+-  gem "puppet-module-posix-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
+-  gem "puppet-module-posix-dev-r#{minor_version}", '~> 1.0',     require: false, platforms: [:ruby]
+-  gem "puppet-module-win-default-r#{minor_version}", '~> 1.0',   require: false, platforms: [:mswin, :mingw, :x64_mingw]
+-  gem "puppet-module-win-dev-r#{minor_version}", '~> 1.0',       require: false, platforms: [:mswin, :mingw, :x64_mingw]
+-  gem "voxpupuli-puppet-lint-plugins", '>= 3.0',                 require: false
+-  gem "puppet-lint-absolute_classname-check", '>= 3.0.1',        require: false
+-  gem "puppet-lint-absolute_template_path", '>= 1.0.1',          require: false
+-  gem "puppet-lint-empty_trailing_lines", '>= 0.0.1',            require: false
+-  gem "puppet-lint-file_ensure-check", '>= 1.0.0',               require: false
+-  gem "puppet-lint-strict_indent-check", '>= 2.0.8',             require: false
+-  gem "puppet-lint-trailing_comma-check", '>= 0.4.3',            require: false
+-  gem "puppet-lint-unquoted_string-check", '>= 2.1.0',           require: false
++  gem "json", '= 2.1.0',                         require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
++  gem "json", '= 2.3.0',                         require: false if Gem::Requirement.create(['>= 2.7.0', '< 3.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
++  gem "json", '= 2.5.1',                         require: false if Gem::Requirement.create(['>= 3.0.0', '< 3.0.5']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
++  gem "json", '= 2.6.1',                         require: false if Gem::Requirement.create(['>= 3.1.0', '< 3.1.3']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
++  gem "json", '= 2.6.3',                         require: false if Gem::Requirement.create(['>= 3.2.0', '< 4.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
++  gem "racc", '~> 1.4.0',                        require: false if Gem::Requirement.create(['>= 2.7.0', '< 3.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
++  gem "voxpupuli-puppet-lint-plugins", '~> 5.0', require: false
++  gem "facterdb", '~> 1.18',                     require: false
++  gem "metadata-json-lint", '~> 3.0',            require: false
++  gem "puppetlabs_spec_helper", '~> 6.0',        require: false
++  gem "rspec-puppet-facts", '~> 2.0',            require: false
++  gem "codecov", '~> 0.2',                       require: false
++  gem "dependency_checker", '~> 1.0.0',          require: false
++  gem "parallel_tests", '= 3.12.1',              require: false
++  gem "pry", '~> 0.10',                          require: false
++  gem "simplecov-console", '~> 0.5',             require: false
++  gem "puppet-debugger", '~> 1.0',               require: false
++  gem "rubocop", '= 1.48.1',                     require: false
++  gem "rubocop-performance", '= 1.16.0',         require: false
++  gem "rubocop-rspec", '= 2.19.0',               require: false
++  gem "puppet-strings", '~> 4.0',                require: false
++  gem "rb-readline", '= 0.5.5',                  require: false, platforms: [:mswin, :mingw, :x64_mingw]
+ end
+ group :system_tests do
+-  gem "puppet-module-posix-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
+-  gem "puppet-module-win-system-r#{minor_version}", '~> 1.0',   require: false, platforms: [:mswin, :mingw, :x64_mingw]
++  gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw]
++  gem "serverspec", '~> 2.41',   require: false
++end
++group :release_prep do
++  gem "puppet-strings", '~> 4.0',         require: false
++  gem "puppetlabs_spec_helper", '~> 6.0', require: false
+ end
+ 
+ puppet_version = ENV['PUPPET_GEM_VERSION']
+
+
+--- /home/nilpa76/user-repos/aim_control/Rakefile	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/Rakefile.pdknew	2024-05-07 18:00:36.762031548 +0200
+@@ -1,12 +1,11 @@
+ # frozen_string_literal: true
+ 
+ require 'bundler'
+-require 'puppet_litmus/rake_tasks' if Bundler.rubygems.find_name('puppet_litmus').any?
++require 'puppet_litmus/rake_tasks' if Gem.loaded_specs.key? 'puppet_litmus'
+ require 'puppetlabs_spec_helper/rake_tasks'
+ require 'puppet-syntax/tasks/puppet-syntax'
+-require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
+-require 'github_changelog_generator/task' if Bundler.rubygems.find_name('github_changelog_generator').any?
+-require 'puppet-strings/tasks' if Bundler.rubygems.find_name('puppet-strings').any?
++require 'github_changelog_generator/task' if Gem.loaded_specs.key? 'github_changelog_generator'
++require 'puppet-strings/tasks' if Gem.loaded_specs.key? 'puppet-strings'
+ 
+ def changelog_user
+   return unless Rake.application.top_level_tasks.include? "changelog"
+@@ -44,7 +43,7 @@
+ PuppetLint.configuration.send('disable_relative')
+ 
+ 
+-if Bundler.rubygems.find_name('github_changelog_generator').any?
++if Gem.loaded_specs.key? 'github_changelog_generator'
+   GitHubChangelogGenerator::RakeTask.new :changelog do |config|
+     raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'" if Rake.application.top_level_tasks.include? "changelog" and ENV['CHANGELOG_GITHUB_TOKEN'].nil?
+     config.user = "#{changelog_user}"
+
+
+--- /home/nilpa76/user-repos/aim_control/spec/default_facts.yml	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/spec/default_facts.yml.pdknew	2024-05-07 18:00:36.762194646 +0200
+@@ -2,8 +2,9 @@
+ #
+ # Facts specified here will override the values provided by rspec-puppet-facts.
+ ---
+-ipaddress: "172.16.254.254"
+-ipaddress6: "FE80:0000:0000:0000:AAAA:AAAA:AAAA"
++networking:
++  ip: "172.16.254.254"
++  ip6: "FE80:0000:0000:0000:AAAA:AAAA:AAAA"
++  mac: "AA:AA:AA:AA:AA:AA"
+ is_pe: false
+-macaddress: "AA:AA:AA:AA:AA:AA"
+
+
+--- /home/nilpa76/user-repos/aim_control/spec/spec_helper.rb	2024-05-07 17:52:04.429712285 +0200
++++ /home/nilpa76/user-repos/aim_control/spec/spec_helper.rb.pdknew	2024-05-07 18:00:36.762465329 +0200
+@@ -28,8 +28,8 @@
+   next unless File.exist?(f) && File.readable?(f) && File.size?(f)
+ 
+   begin
+-    default_facts.merge!(YAML.safe_load(File.read(f), [], [], true))
+-  rescue => e
++    default_facts.merge!(YAML.safe_load(File.read(f), permitted_classes: [], permitted_symbols: [], aliases: true))
++  rescue StandardError => e
+     RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}"
+   end
+ end
diff --git a/metadata.json b/metadata.json
index 33c7aa13a9ca046a7cc32082de625955b080af1c..353c674526a555cfbdd134b6fb28f1dec6dc0ac5 100644
--- a/metadata.json
+++ b/metadata.json
@@ -61,7 +61,7 @@
       "version_requirement": ">= 6.21.0 < 8.0.0"
     }
   ],
-  "pdk-version": "2.5.0",
+  "pdk-version": "3.0.1",
   "template-url": "https://gitlab.it.liu.se/puppet-infra/pdk-templates.git#liu",
-  "template-ref": "heads/liu-0-g3298fb5"
+  "template-ref": "heads/liu-0-g522eb00"
 }
diff --git a/spec/default_facts.yml b/spec/default_facts.yml
index f777abfc9905202e7ccf5b5fcc76b9b4c59a39fb..3346c394df5a06fba389c76f1e2ccbb04c77ee6c 100644
--- a/spec/default_facts.yml
+++ b/spec/default_facts.yml
@@ -2,7 +2,8 @@
 #
 # Facts specified here will override the values provided by rspec-puppet-facts.
 ---
-ipaddress: "172.16.254.254"
-ipaddress6: "FE80:0000:0000:0000:AAAA:AAAA:AAAA"
+networking:
+  ip: "172.16.254.254"
+  ip6: "FE80:0000:0000:0000:AAAA:AAAA:AAAA"
+  mac: "AA:AA:AA:AA:AA:AA"
 is_pe: false
-macaddress: "AA:AA:AA:AA:AA:AA"
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index ee9e00395e4a18319dfa49b95f7030797471cc8a..3f9a6c717863bd2eb4bdd13cf9c6b0399fe09129 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -28,8 +28,8 @@ default_fact_files.each do |f|
   next unless File.exist?(f) && File.readable?(f) && File.size?(f)
 
   begin
-    default_facts.merge!(YAML.safe_load(File.read(f), [], [], true))
-  rescue => e
+    default_facts.merge!(YAML.safe_load(File.read(f), permitted_classes: [], permitted_symbols: [], aliases: true))
+  rescue StandardError => e
     RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}"
   end
 end