Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upgrade to pdk 3, ruby 3 [spike] #774

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .fixtures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ fixtures:
repositories:
apache:
repo: "https://github.com/mlibrary/puppetlabs-apache"
ref: "v7.1.1"
forge_modules:
rbenv: {"repo": "jdowning/rbenv", "ref": "3.1.0" }
archive: {"repo": "puppet/archive", "ref": "7.1.0" }
Expand Down
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
*.erb eol=lf
*.pp eol=lf
*.sh eol=lf
*.epp eol=lf
15 changes: 13 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,24 @@
/log/
/pkg/
/spec/fixtures/manifests/
/spec/fixtures/modules/
/spec/fixtures/modules/*
/tmp/
/vendor/
/.vendor/
/convert_report.txt
/update_report.txt
.DS_Store
.project
.envrc
/inventory.yaml
/spec/fixtures/litmus_inventory.yaml
.resource_types
.modules
.task_cache.json
.plan_cache.json
.rerun.json
bolt-debug.log
/.pdkignore
/.tmp/
/Puppetfile.lock
/modules/
/spec/examples.txt
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.7
3.1
4 changes: 2 additions & 2 deletions .sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
- /.tmp/
- /Puppetfile.lock
- /modules/
- /spec/examples.txt
Gemfile:
required:
':development':
- gem: faker
- gem: librarian-puppet
version: '>= 5.0'
- gem: pdk
version: 2.7.1
version: '~> 3.3.0'
spec/default_facts.yml:
extra_facts:
ec2_tag_role: nebula::role::aws
Expand Down
1 change: 0 additions & 1 deletion .tool-versions

This file was deleted.

4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
FROM ruby:2.7
FROM ruby:3.2
ARG UNAME=app
ARG UID=1000
ARG GID=1000
ARG APP_HOME=/app

RUN gem install 'bundler:~>2.4.19'
RUN gem install 'bundler:~>2.5.11'
RUN groupadd -g $GID -o $UNAME
RUN useradd -m -d $APP_HOME -u $UID -g $GID -o -s /bin/bash $UNAME
RUN mkdir -p /gems && chown $UID:$GID /gems
Expand Down
84 changes: 67 additions & 17 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,31 +1,81 @@
source 'https://rubygems.org'
source ENV['GEM_SOURCE'] || 'https://rubygems.org'

minor_version = Gem::Version.new(RUBY_VERSION.dup).segments[0..1].join('.')
def location_for(place_or_version, fake_version = nil)
git_url_regex = %r{\A(?<url>(https?|git)[:@][^#]*)(#(?<branch>.*))?}
file_url_regex = %r{\Afile:\/\/(?<path>.*)}

gem 'rake', '>= 13.0.6'
if place_or_version && (git_url = place_or_version.match(git_url_regex))
[fake_version, { git: git_url[:url], branch: git_url[:branch], require: false }].compact
elsif place_or_version && (file_url = place_or_version.match(file_url_regex))
['>= 0', { path: File.expand_path(file_url[:path]), require: false }]
else
[place_or_version, { require: false }]
end
end

group :development do
gem "fast_gettext", require: false
gem "puppet-module-posix-default-r#{minor_version}", require: false, platforms: [:ruby]
gem "puppet-module-posix-dev-r#{minor_version}", require: false, platforms: [:ruby]
gem "rubocop-rake"
gem "faker"
gem "librarian-puppet"
gem "pdk", '2.7.1'
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 "deep_merge", '~> 1.2.2', require: false
gem "voxpupuli-puppet-lint-plugins", '~> 5.0', require: false
gem "facterdb", '~> 2.1', require: false
gem "metadata-json-lint", '~> 4.0', require: false
gem "rspec-puppet-facts", '~> 4.0', 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.9', require: false
gem "puppet-debugger", '~> 1.0', require: false
gem "rubocop", '~> 1.50.0', require: false
gem "rubocop-performance", '= 1.16.0', require: false
gem "rubocop-rspec", '= 2.19.0', require: false
gem "rb-readline", '= 0.5.5', require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "rexml", '>= 3.0.0', '< 3.2.7', require: false
gem "faker", require: false
gem "librarian-puppet", '>= 5.0', require: false
gem "pdk", '~> 3.3.0', require: false
end
group :development, :release_prep do
gem "puppet-strings", '~> 4.0', require: false
gem "puppetlabs_spec_helper", '~> 7.0', require: false
end
group :system_tests do
gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw]
gem "CFPropertyList", '< 3.0.7', require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "serverspec", '~> 2.41', require: false
end

puppet_version = ENV['PUPPET_GEM_VERSION']
facter_version = ENV['FACTER_GEM_VERSION']
hiera_version = ENV['HIERA_GEM_VERSION']

gems = {}

gem 'puppet', '~> 7.26'
gem 'puppet-strings'
gem 'semantic_puppet'
gem 'yard', '>= 0.9.36'
gems['puppet'] = location_for(puppet_version)

# If facter or hiera versions have been specified via the environment
# variables

gems['facter'] = location_for(facter_version) if facter_version
gems['hiera'] = location_for(hiera_version) if hiera_version

gems.each do |gem_name, gem_params|
gem gem_name, *gem_params
end

# Evaluate Gemfile.local and ~/.gemfile if they exist
[
extra_gemfiles = [
"#{__FILE__}.local",
File.join(Dir.home, '.gemfile'),
].each do |gemfile|
]

extra_gemfiles.each do |gemfile|
if File.file?(gemfile) && File.readable?(gemfile)
eval(File.read(gemfile), binding)
end
end

# vim: syntax=ruby
53 changes: 6 additions & 47 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,50 +1,9 @@
# frozen_string_literal: true

require 'bundler'
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-strings/tasks' if Gem.loaded_specs.key? 'puppet-strings'

# We sometimes refer to non-nebula puppet fileserver paths.
PuppetLint.configuration.send('disable_puppet_url_without_modules')

desc "run librarian-puppet to confirm dependencies are resolvable"
task librarian: [:librarian_standalone, :librarian_clean]

desc "don't clean after librarian"
task :librarian_standalone do |t|
system('librarian-puppet install --verbose') or abort
end

desc "rm Puppetfile.lock"
task :librarian_clean do |t|
FileUtils.rm_f('Puppetfile.lock')
end

desc "list outdated modules in .fixtures.yml"
task :outdated do |t|
require 'yaml'
require 'net/http'
require 'uri'
require 'json'

fixtures = YAML.load_file('.fixtures.yml')
fixtures['fixtures']['forge_modules'].values.each do |mod|
repo = mod['repo']
slug = repo.tr('/','-')
vers = mod['ref']
uri = URI.parse "https://forgeapi.puppet.com/v3/modules/#{slug}"

response = Net::HTTP.get_response(uri)
raise "failed to fetch #{mod['repo']}" unless response.code == '200'

releases = JSON.parse(response.body)['releases'].map{|x| x['version']}
latest = releases.first
installed_index = releases.find_index(vers)
installed = releases[installed_index]

if installed_index != 0
newer = releases.slice(0,installed_index).join(', ')
puts "#{repo} (#{installed}) < #{newer}"
puts "https://forge.puppet.com/modules/#{repo}"

puts
end
end
end
PuppetLint.configuration.send('disable_relative')
2 changes: 1 addition & 1 deletion lib/puppet/functions/public_ip.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def run
if aws_node?
ec2_metadata['public-ipv4']
else
facts['ipaddress']
facts['networking']['ip']
end
end

Expand Down
10 changes: 5 additions & 5 deletions metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
{"name": "puppetlabs/concat", "version_requirement": ">= 9.0.2 < 10.0.0"},
{"name": "puppetlabs/cron_core", "version_requirement": ">= 1.3.0 < 2.0.0" },
{"name": "puppetlabs/docker", "version_requirement": ">= 10.0.1 < 11.0.0"},
{"name": "puppetlabs/firewall", "version_requirement": ">= 8.1.1 < 9.0.0 "},
{"name": "puppetlabs/firewall", "version_requirement": ">= 8.1.1 < 9.0.0" },
{"name": "puppetlabs/host_core", "version_requirement": ">= 1.3.0 < 2.0.0" },
{"name": "puppetlabs/inifile", "version_requirement": ">= 6.1.1 < 7.0.0" },
{"name": "puppetlabs/lvm", "version_requirement": ">= 2.3.0 < 3.0.0" },
Expand All @@ -46,10 +46,10 @@
"requirements": [
{
"name": "puppet",
"version_requirement": ">= 7.0.0 < 8.0.0"
"version_requirement": ">= 7.0.0 < 9.0.0"
}
],
"pdk-version": "1.3.2",
"template-url": "file:///opt/puppetlabs/pdk/share/cache/pdk-templates.git",
"template-ref": "1.3.2-0-g07678c8"
"pdk-version": "3.3.0",
"template-url": "https://github.com/puppetlabs/pdk-templates#3.3.0",
"template-ref": "tags/3.3.0-0-g5d17ec1"
}
31 changes: 31 additions & 0 deletions rakelib/forge.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
desc "list outdated modules in .fixtures.yml"
task :outdated do |t|
require 'yaml'
require 'net/http'
require 'uri'
require 'json'

fixtures = YAML.load_file('.fixtures.yml')
fixtures['fixtures']['forge_modules'].values.each do |mod|
repo = mod['repo']
slug = repo.tr('/','-')
vers = mod['ref']
uri = URI.parse "https://forgeapi.puppet.com/v3/modules/#{slug}"

response = Net::HTTP.get_response(uri)
raise "failed to fetch #{mod['repo']}" unless response.code == '200'

releases = JSON.parse(response.body)['releases'].map{|x| x['version']}
latest = releases.first
installed_index = releases.find_index(vers)
installed = releases[installed_index]

if installed_index != 0
newer = releases.slice(0,installed_index).join(', ')
puts "#{repo} (#{installed}) < #{newer}"
puts "https://forge.puppet.com/modules/#{repo}"

puts
end
end
end
12 changes: 12 additions & 0 deletions rakelib/librarian.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
desc "run librarian-puppet to confirm dependencies are resolvable"
task librarian: [:librarian_standalone, :librarian_clean]

desc "don't clean after librarian"
task :librarian_standalone do |t|
system('librarian-puppet install --verbose') or abort
end

desc "rm Puppetfile.lock"
task :librarian_clean do |t|
FileUtils.rm_f('Puppetfile.lock')
end
2 changes: 1 addition & 1 deletion spec/classes/profile/base_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def contain_base_class(name)
on_supported_os.each do |os, os_facts|
context "on #{os}" do
let(:facts) { os_facts }
let(:fqdn) { facts[:fqdn] }
let(:fqdn) { facts[:networking]['fqdn'] }

it { is_expected.to contain_service('puppet').without_ensure }
it { is_expected.to contain_service('puppet').with_enable(true) }
Expand Down
35 changes: 7 additions & 28 deletions spec/default_facts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,17 @@
#
# Facts specified here will override the values provided by rspec-puppet-facts.
---
concat_basedir: "/tmp"
ipaddress: "172.16.254.254"
is_pe: false
macaddress: "AA:AA:AA:AA:AA:AA"
dmi: {}
disks: {}
ec2_tag_role: nebula::role::aws
datacenter: mydatacenter
installed_backports: []
datacenter: "mydatacenter"
prometheus_errors_total: 0
mountpoints: {}
disks: {}
root_home: "/root"
letsencrypt_directory:
foo.example.com: '/etc/letsencrypt/live/foo.example.com'
example.invalid: '/etc/letsencrypt/live/example.invalid'

# required by puppetlabs/postgres since 8.1.0
service_provider: systemd

# required by apt with update => { frequency => 'daily' }
apt_update_last_success: '1523250000'

ec2_tag_role: nebula::role::aws

vm_guests: ['invalid_existing_guest']

# The ruby tests by default are set to install 2.4.3 and 2.5.0, so 2.4.2
# represents an installed but not desired version of ruby, while 2.5.0
# represents an already-installed and still desired version of ruby.
foo.example.com: "/etc/letsencrypt/live/foo.example.com"
example.invalid: "/etc/letsencrypt/live/example.invalid"
prometheus_errors_total: 0
ruby_versions:
- 2.4.2
- 2.5.0
vm_guests:
- invalid_existing_guest

# This can be removed once the firewall module is updated.
ip6tables_version: 1.6.0
14 changes: 13 additions & 1 deletion spec/functions/public_ip_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,17 @@
require 'spec_helper'

describe 'public_ip' do
it { is_expected.to run.and_return('172.16.254.254') }
on_supported_os.each do |os, os_facts|
context "on #{os}" do
let(:facts) do
os_facts.merge(
ipaddress: 'INVALID_DO_NOT_USE',
hostname: 'INVALID_DO_NOT_USE',
fqdn: 'INVALID_DO_NOT_USE',
)
end

it { is_expected.to run.and_return(facts[:networking]['ip']) }
end
end
end
Loading
Loading