From ddae40badeec8dd69facca06582e273bb3c2ed60 Mon Sep 17 00:00:00 2001 From: Spencer McElmurry Date: Mon, 27 Nov 2017 15:55:33 -0800 Subject: [PATCH 01/24] (maint) Add option for BEAKER_HOSTS file to be pregenerated in acceptance tests Before, the host configuration was hard-coded. Added an option to specify an ENV var in order to use a different string or a pregenerated hostfile. This also allows us to use abs in production, so that has been added to the Gemfile --- Gemfile | 1 + Rakefile | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 9604bb0..0f6f8d9 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,7 @@ end # don't want to create a transitive dependency group :acceptance_testing do gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 3.0') + gem "beaker-abs", *location_for(ENV['ABS_VERSION'] || '~> 0.3.0') end diff --git a/Rakefile b/Rakefile index d334139..32b6495 100644 --- a/Rakefile +++ b/Rakefile @@ -20,11 +20,12 @@ Runs the base beaker acceptance test using the hypervisor library beaker_gem_spec = Gem::Specification.find_by_name('beaker') beaker_gem_dir = beaker_gem_spec.gem_dir beaker_test_base_dir = File.join(beaker_gem_dir, 'acceptance/tests/base') + beaker_hosts = ENV['BEAKER_HOSTS'] || 'redhat7-64af-64default.mdcal' load_path_option = File.join(beaker_gem_dir, 'acceptance/lib') sh("beaker", "--tests", beaker_test_base_dir, "--log-level", "verbose", - "--hosts", "redhat7-64af-redhat7-64default.mdcal", + "--hosts", beaker_hosts, "--load-path", load_path_option, "--keyfile", ENV['KEY'] || "#{ENV['HOME']}/.ssh/id_rsa-acceptance") end From 3ac63b61da010ec2104ecb119f7d709d55b64a0e Mon Sep 17 00:00:00 2001 From: Jenkins CI Date: Thu, 4 Jan 2018 14:44:48 -0800 Subject: [PATCH 02/24] (GEM) update beaker-vmpooler version to 1.2.0 --- lib/beaker-vmpooler/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker-vmpooler/version.rb b/lib/beaker-vmpooler/version.rb index db6af25..906c61f 100644 --- a/lib/beaker-vmpooler/version.rb +++ b/lib/beaker-vmpooler/version.rb @@ -1,3 +1,3 @@ module BeakerVmpooler - VERSION = '1.1.0' + VERSION = '1.2.0' end From b1f30c268f4ca9432225a225cb98c21772404d14 Mon Sep 17 00:00:00 2001 From: kevpl Date: Fri, 9 Mar 2018 15:00:54 -0800 Subject: [PATCH 03/24] (MAINT) fix connection preferences Previously, beaker-vmpooler defined its connection preferences as string options, but beaker provides defaults as symbols. This ends with beaker saying that it doesn't support methods that it does due to the mismatch. This will get rid of those messages, as the provided methods will be symbols, matching what beaker expects --- lib/beaker/hypervisor/vmpooler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker/hypervisor/vmpooler.rb b/lib/beaker/hypervisor/vmpooler.rb index 9381a67..db63f7f 100644 --- a/lib/beaker/hypervisor/vmpooler.rb +++ b/lib/beaker/hypervisor/vmpooler.rb @@ -53,7 +53,7 @@ module Beaker end def connection_preference(host) - ['vmhostname', 'ip', 'hostname'] + [:vmhostname, :ip, :hostname] end def check_url url From b8804eb5f18917584ff4c0b4ab0b6ceff34ded4b Mon Sep 17 00:00:00 2001 From: Dakota Schneider Date: Mon, 2 Jul 2018 08:57:30 -0700 Subject: [PATCH 04/24] (MAINT) Drop MockVsphereHelper (#10) * (MAINT) Update specs to remove VsphereHelper VsphereHelper is no longer relevant since vmpooler doesn't use vSphere/vCloud any more. * (MAINT) Drop conflicting, unused dependency on beaker-abs * (MAINT) Conditionally pin fakefs '< 0.14.0' for Ruby < '2.3.0' * (MAINT) Remove more VsphereHelper references And minor whitespace cleanup * (MAINT) Drop unused beaker-abs dependency Could have sworn I fixed that... maybe in a different branch? --- Gemfile | 1 - beaker-vmpooler.gemspec | 7 ++++++- spec/beaker/hypervisor/vmpooler_spec.rb | 25 ++++++------------------- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/Gemfile b/Gemfile index 0f6f8d9..9604bb0 100644 --- a/Gemfile +++ b/Gemfile @@ -19,7 +19,6 @@ end # don't want to create a transitive dependency group :acceptance_testing do gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 3.0') - gem "beaker-abs", *location_for(ENV['ABS_VERSION'] || '~> 0.3.0') end diff --git a/beaker-vmpooler.gemspec b/beaker-vmpooler.gemspec index 1b195d5..28ce39a 100644 --- a/beaker-vmpooler.gemspec +++ b/beaker-vmpooler.gemspec @@ -20,7 +20,12 @@ Gem::Specification.new do |s| # Testing dependencies s.add_development_dependency 'rspec', '~> 3.0' s.add_development_dependency 'rspec-its' - s.add_development_dependency 'fakefs', '~> 0.6' + # pin fakefs for Ruby < 2.3 + if RUBY_VERSION < "2.3" + s.add_development_dependency 'fakefs', '~> 0.6', '< 0.14' + else + s.add_development_dependency 'fakefs', '~> 0.6' + end s.add_development_dependency 'rake', '~> 10.1' s.add_development_dependency 'simplecov' s.add_development_dependency 'pry', '~> 0.10' diff --git a/spec/beaker/hypervisor/vmpooler_spec.rb b/spec/beaker/hypervisor/vmpooler_spec.rb index 067fc12..6e15662 100644 --- a/spec/beaker/hypervisor/vmpooler_spec.rb +++ b/spec/beaker/hypervisor/vmpooler_spec.rb @@ -4,10 +4,6 @@ module Beaker describe Vmpooler do before :each do - vms = make_hosts() - MockVsphereHelper.set_config( fog_file_contents ) - MockVsphereHelper.set_vms( vms ) - stub_const( "VsphereHelper", MockVsphereHelper ) stub_const( "Net", MockNet ) allow( JSON ).to receive( :parse ) do |arg| arg @@ -147,20 +143,15 @@ module Beaker describe "#cleanup" do it "cleans up hosts in the pool" do - MockVsphereHelper.powerOn - + mock_http = MockNet::HTTP.new( "host", "port" ) vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) - allow( vmpooler ).to receive( :require ).and_return( true ) - allow( vmpooler ).to receive( :sleep ).and_return( true ) vmpooler.provision - vmpooler.cleanup + vm_count = vmpooler.instance_variable_get( :@hosts ).count - hosts = vmpooler.instance_variable_get( :@hosts ) - hosts.each do | host | - name = host.name - vm = MockVsphereHelper.find_vm( name ) - expect( vm.runtime.powerState ).to be === "poweredOn" #handed back to the pool, stays on - end + expect( Net::HTTP ).to receive( :new ).exactly( vm_count ).times.and_return( mock_http ) + expect( mock_http ).to receive( :request ).exactly( vm_count ).times + expect( Net::HTTP::Delete ).to receive( :new ).exactly( vm_count ).times + expect{ vmpooler.cleanup }.to_not raise_error end end end @@ -168,10 +159,6 @@ module Beaker describe Vmpooler do before :each do - vms = make_hosts() - MockVsphereHelper.set_config( fog_file_contents ) - MockVsphereHelper.set_vms( vms ) - stub_const( "VsphereHelper", MockVsphereHelper ) stub_const( "Net", MockNet ) allow( JSON ).to receive( :parse ) do |arg| arg From c0938fe1c83c62cafe8ff3782b5e328c2aecb103 Mon Sep 17 00:00:00 2001 From: Dakota Schneider Date: Mon, 16 Jul 2018 13:09:51 -0700 Subject: [PATCH 05/24] (BKR-1481) Rewrite beaker-vmpooler to use shared .fog parsing (#11) * (BKR-1481) Rewrite beaker-vmpooler to use shared .fog parsing * (BKR-1481) Rename Fog Credential Method * (BKR-1481) Cleanup spec tests Spec tests don't need to replicate spec tests of core functionality. --- lib/beaker/hypervisor/vmpooler.rb | 26 ++---- spec/beaker/hypervisor/vmpooler_spec.rb | 105 ++++++------------------ 2 files changed, 31 insertions(+), 100 deletions(-) diff --git a/lib/beaker/hypervisor/vmpooler.rb b/lib/beaker/hypervisor/vmpooler.rb index db63f7f..d5857f6 100644 --- a/lib/beaker/hypervisor/vmpooler.rb +++ b/lib/beaker/hypervisor/vmpooler.rb @@ -27,29 +27,17 @@ module Beaker def load_credentials(dot_fog = '.fog') creds = {} - - if fog = read_fog_file(dot_fog) - if fog[:default] && fog[:default][:vmpooler_token] - creds[:vmpooler_token] = fog[:default][:vmpooler_token] + begin + fog = get_fog_credentials(dot_fog) + if fog[:vmpooler_token] + creds[:vmpooler_token] = fog[:vmpooler_token] else - @logger.warn "Credentials file (#{dot_fog}) is missing a :default section with a :vmpooler_token value; proceeding without authentication" + @logger.warn "vmpooler_token not found in credentials file (#{dot_fog})\nProceeding without authentication" end - else - @logger.warn "Credentials file (#{dot_fog}) is empty; proceeding without authentication" + rescue ArgumentError => e + @logger.warn "Invalid credentials file:\n(#{e.class}) #{e.message}\nProceeding without authentication" end - creds - - rescue TypeError, Psych::SyntaxError => e - @logger.warn "#{e.class}: Credentials file (#{dot_fog}) has invalid syntax; proceeding without authentication" - creds - rescue Errno::ENOENT - @logger.warn "Credentials file (#{dot_fog}) not found; proceeding without authentication" - creds - end - - def read_fog_file(dot_fog = '.fog') - YAML.load_file(dot_fog) end def connection_preference(host) diff --git a/spec/beaker/hypervisor/vmpooler_spec.rb b/spec/beaker/hypervisor/vmpooler_spec.rb index 6e15662..a0495eb 100644 --- a/spec/beaker/hypervisor/vmpooler_spec.rb +++ b/spec/beaker/hypervisor/vmpooler_spec.rb @@ -168,96 +168,39 @@ module Beaker describe "#load_credentials" do - it 'continues without credentials when fog file is missing' do - allow_any_instance_of( Beaker::Vmpooler ).to \ - receive(:read_fog_file).and_raise(Errno::ENOENT.new) + it 'loads credentials from a fog file' do + credentials = { :vmpooler_token => "example_token" } + make_opts = { :dot_fog => '.fog' } + + expect_any_instance_of( Beaker::Vmpooler ).to receive( :get_fog_credentials ).and_return(credentials) vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) + expect( vmpooler.credentials ).to be == credentials + end + + it 'continues without credentials when there are problems loading the fog file' do + logger = double( 'logger' ) + make_opts = { :logger => logger, :dot_fog => '.fog' } + + expect_any_instance_of( Beaker::Vmpooler ).to receive( :get_fog_credentials ).and_raise( ArgumentError, 'something went wrong' ) + expect( logger ).to receive( :warn ).with( /Invalid credentials file.*something went wrong.*Proceeding without authentication/m ) + + vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) + expect( vmpooler.credentials ).to be == {} end - it 'continues without credentials when fog file is empty' do - allow_any_instance_of( Beaker::Vmpooler ).to \ - receive(:read_fog_file).and_return(false) + it 'continues without credentials when fog file has no vmpooler_token' do + logger = double( 'logger' ) + make_opts = { :logger => logger, :dot_fog => '.fog' } + + expect_any_instance_of( Beaker::Vmpooler ).to receive( :get_fog_credentials ).and_return( {} ) + expect( logger ).to receive( :warn ).with( /vmpooler_token not found in credentials file.*Proceeding without authentication/m ) vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) + expect( vmpooler.credentials ).to be == {} end - - it 'continues without credentials when fog file contains no :default section' do - data = { :some => { :other => :data } } - - allow_any_instance_of( Beaker::Vmpooler ).to \ - receive(:read_fog_file).and_return(data) - - vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) - expect( vmpooler.credentials ).to be == { } - end - - it 'continues without credentials when fog file :default section has no :vmpooler_token' do - data = { :default => { :something_else => "TOKEN" } } - - allow_any_instance_of( Beaker::Vmpooler ).to \ - receive(:read_fog_file).and_return(data) - - vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) - expect( vmpooler.credentials ).to be == { } - end - - it 'continues without credentials when there are formatting errors in the fog file' do - data = { "'default'" => { :vmpooler_token => "b2wl8prqe6ddoii70md" } } - - allow_any_instance_of( Beaker::Vmpooler ).to \ - receive(:read_fog_file).and_return(data) - - logger = double('logger') - - expect(logger).to receive(:warn).with(/is missing a :default section with a :vmpooler_token value/) - make_opts = {:logger => logger} - - vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) - expect( vmpooler.credentials ).to be == { } - end - - it 'throws a TypeError and continues without credentials when there are syntax errors in the fog file' do - data = "'default'\n :vmpooler_token: z2wl8prqe0ddoii70ad" - - allow( File ).to receive( :open ).and_yield( StringIO.new(data) ) - logger = double('logger') - - expect(logger).to receive(:warn).with(/TypeError: .* has invalid syntax/) - make_opts = {:logger => logger} - - vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) - - expect( vmpooler.credentials ).to be == { } - end - - it 'throws a Psych::SyntaxError and continues without credentials when there are syntax errors in the fog file' do - - data = ";default;\n :vmpooler_token: z2wl8prqe0ddoii707d" - - allow( File ).to receive( :open ).and_yield( StringIO.new(data) ) - - logger = double('logger') - - expect(logger).to receive(:warn).with(/Psych::SyntaxError: .* invalid syntax/) - make_opts = {:logger => logger} - - vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) - - expect( vmpooler.credentials ).to be == { } - end - - it 'stores vmpooler token when found in fog file' do - data = { :default => { :vmpooler_token => "TOKEN" } } - - allow_any_instance_of( Beaker::Vmpooler ).to \ - receive(:read_fog_file).and_return(data) - - vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) - expect( vmpooler.credentials ).to be == { :vmpooler_token => "TOKEN" } - end end end end From b0bc65618769ef760d6d21eaa47edcda17dd644c Mon Sep 17 00:00:00 2001 From: Jenkins Date: Mon, 16 Jul 2018 20:10:55 +0000 Subject: [PATCH 06/24] (GEM) update beaker-vmpooler version to 1.3.0 --- lib/beaker-vmpooler/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker-vmpooler/version.rb b/lib/beaker-vmpooler/version.rb index 906c61f..83f6aec 100644 --- a/lib/beaker-vmpooler/version.rb +++ b/lib/beaker-vmpooler/version.rb @@ -1,3 +1,3 @@ module BeakerVmpooler - VERSION = '1.2.0' + VERSION = '1.3.0' end From 7a4909805a403a9921956dd28393d5975ca9b688 Mon Sep 17 00:00:00 2001 From: Dakota Schneider Date: Fri, 3 Aug 2018 12:17:32 -0700 Subject: [PATCH 07/24] (BKR-1509) Hypervisor usage instructions for Beaker 4.0 --- README.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4659b40..3d38659 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,27 @@ Beaker library to use vmpooler hypervisor # How to use this wizardry - -This is a gem that allows you to use hosts with [vmpooler](vmpooler.md) hypervisor with [beaker](https://github.com/puppetlabs/beaker). This gem is already included as [beaker dependency](https://github.com/puppetlabs/beaker/blob/master/beaker.gemspec#L59) for you, so you don't need to do anything special to use this gem's functionality with beaker. + +This is a gem that allows you to use hosts with [vmpooler](vmpooler.md) hypervisor with [beaker](https://github.com/puppetlabs/beaker). + +Beaker will automatically load the appropriate hypervisors for any given hosts file, so as long as your project dependencies are satisfied there's nothing else to do. No need to `require` this library in your tests. + +## With Beaker 3.x + +This library is included as a dependency of Beaker 3.x versions, so there's nothing to do. + +## With Beaker 4.x + +As of Beaker 4.0, all hypervisor and DSL extension libraries have been removed and are no longer dependencies. In order to use a specific hypervisor or DSL extension library in your project, you will need to include them alongside Beaker in your Gemfile or project.gemspec. E.g. + +~~~ruby +# Gemfile +gem 'beaker', '~>4.0' +gem 'beaker-vmpooler' +# project.gemspec +s.add_runtime_dependency 'beaker', '~>4.0' +s.add_runtime_dependency 'beaker-vmpooler' +~~~ # Spec tests From 5317f2c1db092c9c38c55e2fd23f971cf19b5752 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Fri, 23 Nov 2018 15:59:30 +0000 Subject: [PATCH 08/24] (maint) random backoff strategy The retry logic for VMPooler has two issues. 1) Waiting longer than VMPooler takes to refill the pool to retry introduces excessive delays, and 2) waiting for a deterministic amount of time means that processes started at the same time stay in sync causing peak loads. This change caps the wait time at 15 seconds plus a random wait time, addressing both issues. --- lib/beaker/hypervisor/vmpooler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker/hypervisor/vmpooler.rb b/lib/beaker/hypervisor/vmpooler.rb index d5857f6..acb0dce 100644 --- a/lib/beaker/hypervisor/vmpooler.rb +++ b/lib/beaker/hypervisor/vmpooler.rb @@ -169,7 +169,7 @@ module Beaker @logger.debug("Retrying provision for vmpooler host after waiting #{wait} second(s)") sleep wait waited += wait - last_wait, wait = wait, last_wait + wait + last_wait, wait = wait, [last_wait + wait, 15].min + rand(5) retry end report_and_raise(@logger, e, 'Vmpooler.provision') From 15acdf0d7f5b553b87335df4f5974a0de091bfe4 Mon Sep 17 00:00:00 2001 From: Jenkins Date: Mon, 26 Nov 2018 18:20:45 +0000 Subject: [PATCH 09/24] (GEM) update beaker-vmpooler version to 1.3.1 --- lib/beaker-vmpooler/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker-vmpooler/version.rb b/lib/beaker-vmpooler/version.rb index 83f6aec..3a4be77 100644 --- a/lib/beaker-vmpooler/version.rb +++ b/lib/beaker-vmpooler/version.rb @@ -1,3 +1,3 @@ module BeakerVmpooler - VERSION = '1.3.0' + VERSION = '1.3.1' end From 64c827fab06de0d2c9bc1530651e590a66507c0d Mon Sep 17 00:00:00 2001 From: Jack Stone Date: Mon, 15 Apr 2019 10:51:06 +0100 Subject: [PATCH 10/24] Fix the API URL for adding disks The pooling_api variable already contains /api/v1 so remove this from the disk API URL so we don't end up with it twice --- lib/beaker/hypervisor/vmpooler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker/hypervisor/vmpooler.rb b/lib/beaker/hypervisor/vmpooler.rb index acb0dce..c7c35ff 100644 --- a/lib/beaker/hypervisor/vmpooler.rb +++ b/lib/beaker/hypervisor/vmpooler.rb @@ -274,7 +274,7 @@ module Beaker end begin - uri = URI.parse(@options[:pooling_api] + '/api/v1/vm/' + hostname + '/disk/' + disk_size.to_s) + uri = URI.parse(@options[:pooling_api] + '/vm/' + hostname + '/disk/' + disk_size.to_s) http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri) From a504de0ae4472766dd78595c51cb13d42d5c9759 Mon Sep 17 00:00:00 2001 From: Jenkins Date: Mon, 22 Apr 2019 16:40:14 +0000 Subject: [PATCH 11/24] (GEM) update beaker-vmpooler version to 1.3.2 --- lib/beaker-vmpooler/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker-vmpooler/version.rb b/lib/beaker-vmpooler/version.rb index 3a4be77..bd78fb5 100644 --- a/lib/beaker-vmpooler/version.rb +++ b/lib/beaker-vmpooler/version.rb @@ -1,3 +1,3 @@ module BeakerVmpooler - VERSION = '1.3.1' + VERSION = '1.3.2' end From 4063b01ba0abcf72044f1db99644d977de234aa4 Mon Sep 17 00:00:00 2001 From: "kirby@puppetlabs.com" Date: Tue, 30 Apr 2019 09:49:19 -0700 Subject: [PATCH 12/24] Revert "Fix the API URL for adding disks" This reverts commit 64c827fab06de0d2c9bc1530651e590a66507c0d. --- lib/beaker/hypervisor/vmpooler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker/hypervisor/vmpooler.rb b/lib/beaker/hypervisor/vmpooler.rb index c7c35ff..acb0dce 100644 --- a/lib/beaker/hypervisor/vmpooler.rb +++ b/lib/beaker/hypervisor/vmpooler.rb @@ -274,7 +274,7 @@ module Beaker end begin - uri = URI.parse(@options[:pooling_api] + '/vm/' + hostname + '/disk/' + disk_size.to_s) + uri = URI.parse(@options[:pooling_api] + '/api/v1/vm/' + hostname + '/disk/' + disk_size.to_s) http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri) From d54e825506d740ad12d6fe0a9d83b5172401f79b Mon Sep 17 00:00:00 2001 From: Jenkins Date: Tue, 30 Apr 2019 16:59:45 +0000 Subject: [PATCH 13/24] (GEM) update beaker-vmpooler version to 1.3.3 --- lib/beaker-vmpooler/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker-vmpooler/version.rb b/lib/beaker-vmpooler/version.rb index bd78fb5..99b3474 100644 --- a/lib/beaker-vmpooler/version.rb +++ b/lib/beaker-vmpooler/version.rb @@ -1,3 +1,3 @@ module BeakerVmpooler - VERSION = '1.3.2' + VERSION = '1.3.3' end From 79d0880c5bc679fbbfabb5cd0eb7c85886c23d61 Mon Sep 17 00:00:00 2001 From: Michelle Schuknecht Date: Fri, 23 Aug 2019 19:32:58 -0700 Subject: [PATCH 14/24] (MAINT) Add CODEOWNERS file --- CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 CODEOWNERS diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..cabe96c --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @puppetlabs/beaker From ef72c2399ae2bf74e75e953c99fae4de3176bcd8 Mon Sep 17 00:00:00 2001 From: Gene Liverman Date: Tue, 15 Jun 2021 10:18:13 -0400 Subject: [PATCH 15/24] Add some GH-based testing --- .github/dependabot.yml | 8 ++++++++ .github/workflows/test.yml | 26 ++++++++++++++++++++++++++ Gemfile | 5 +++-- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..c8f8016 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: +- package-ecosystem: bundler + directory: "/" + schedule: + interval: daily + time: "13:00" + open-pull-requests-limit: 10 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..21bafc6 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,26 @@ +name: Test + +on: + - pull_request + - push + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + ruby: + - "2.5" + - "2.6" + - "2.7" + name: Ruby ${{ matrix.ruby }} + steps: + - uses: actions/checkout@v2 + - name: Install Ruby ${{ matrix.ruby }} + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + - name: Run tests + run: bundle exec rake test:spec diff --git a/Gemfile b/Gemfile index 9604bb0..bbec26f 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source ENV['GEM_SOURCE'] || "https://rubygems.org" -gemspec +gemspec :development_group => :acceptance_testing @@ -18,7 +18,8 @@ end # We don't put beaker in as a test dependency because we # don't want to create a transitive dependency group :acceptance_testing do - gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 3.0') + gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 4.0') + gem "beaker-abs" end From 252e92ab4fc73bf1ea0cd4b07394a53b3433bb94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jun 2021 14:27:24 +0000 Subject: [PATCH 16/24] Update rake requirement from ~> 10.1 to ~> 13.0 Updates the requirements on [rake](https://github.com/ruby/rake) to permit the latest version. - [Release notes](https://github.com/ruby/rake/releases) - [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc) - [Commits](https://github.com/ruby/rake/compare/rake-10.1.0...v13.0.3) --- updated-dependencies: - dependency-name: rake dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- beaker-vmpooler.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beaker-vmpooler.gemspec b/beaker-vmpooler.gemspec index 28ce39a..fccd267 100644 --- a/beaker-vmpooler.gemspec +++ b/beaker-vmpooler.gemspec @@ -26,7 +26,7 @@ Gem::Specification.new do |s| else s.add_development_dependency 'fakefs', '~> 0.6' end - s.add_development_dependency 'rake', '~> 10.1' + s.add_development_dependency 'rake', '~> 13.0' s.add_development_dependency 'simplecov' s.add_development_dependency 'pry', '~> 0.10' From 49f57963bcce4f49dba212d9e675a15b593debe7 Mon Sep 17 00:00:00 2001 From: Nick Burgan-Illig Date: Tue, 15 Jun 2021 00:11:55 +0000 Subject: [PATCH 17/24] (maint) Use SSL when pooler_api URL is HTTPS Since vmpooler supports HTTPS and in some environments, only HTTPS is allowed, this sets Net::HTTP to use SSL when the URI is HTTPS. --- lib/beaker/hypervisor/vmpooler.rb | 5 +++++ spec/beaker/hypervisor/vmpooler_spec.rb | 1 + 2 files changed, 6 insertions(+) diff --git a/lib/beaker/hypervisor/vmpooler.rb b/lib/beaker/hypervisor/vmpooler.rb index acb0dce..82a6d3e 100644 --- a/lib/beaker/hypervisor/vmpooler.rb +++ b/lib/beaker/hypervisor/vmpooler.rb @@ -114,6 +114,7 @@ module Beaker uri = URI.parse(@options['pooling_api'] + '/vm/') http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = uri.instance_of?(URI::HTTPS) request = Net::HTTP::Post.new(uri.request_uri) if @credentials[:vmpooler_token] @@ -185,6 +186,7 @@ module Beaker uri = URI.parse(@options[:pooling_api] + '/vm/' + h['vmhostname'].split('.')[0]) http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = uri.instance_of?(URI::HTTPS) request = Net::HTTP::Put.new(uri.request_uri) # merge pre-defined tags with host tags @@ -250,6 +252,7 @@ module Beaker uri = URI.parse(get_template_url(@options['pooling_api'], name)) http = Net::HTTP.new( uri.host, uri.port ) + http.use_ssl = uri.instance_of?(URI::HTTPS) request = Net::HTTP::Delete.new(uri.request_uri) if @credentials[:vmpooler_token] @@ -277,6 +280,7 @@ module Beaker uri = URI.parse(@options[:pooling_api] + '/api/v1/vm/' + hostname + '/disk/' + disk_size.to_s) http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = uri.instance_of?(URI::HTTPS) request = Net::HTTP::Post.new(uri.request_uri) request['X-AUTH-TOKEN'] = @credentials[:vmpooler_token] @@ -309,6 +313,7 @@ module Beaker uri = URI.parse(@options[:pooling_api] + '/vm/' + hostname) http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = uri.instance_of?(URI::HTTPS) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) diff --git a/spec/beaker/hypervisor/vmpooler_spec.rb b/spec/beaker/hypervisor/vmpooler_spec.rb index a0495eb..11b9d0f 100644 --- a/spec/beaker/hypervisor/vmpooler_spec.rb +++ b/spec/beaker/hypervisor/vmpooler_spec.rb @@ -5,6 +5,7 @@ module Beaker before :each do stub_const( "Net", MockNet ) + allow_any_instance_of(MockNet::HTTP).to receive(:use_ssl=) allow( JSON ).to receive( :parse ) do |arg| arg end From 639255b4de0d38fe51c9efc62422decd825ecc97 Mon Sep 17 00:00:00 2001 From: Jenkins Date: Tue, 15 Jun 2021 18:44:52 +0000 Subject: [PATCH 18/24] (GEM) update beaker-vmpooler version to 1.4.0 --- lib/beaker-vmpooler/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/beaker-vmpooler/version.rb b/lib/beaker-vmpooler/version.rb index 99b3474..018ce0b 100644 --- a/lib/beaker-vmpooler/version.rb +++ b/lib/beaker-vmpooler/version.rb @@ -1,3 +1,3 @@ module BeakerVmpooler - VERSION = '1.3.3' + VERSION = '1.4.0' end From e012919f086e6982bee404f71fa04068ad604c41 Mon Sep 17 00:00:00 2001 From: Gene Liverman Date: Wed, 16 Feb 2022 09:36:17 -0500 Subject: [PATCH 19/24] Update CODEOWNERS --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index cabe96c..7d43104 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @puppetlabs/beaker +* @puppetlabs/dio From 596e0d83f9f398c007245b3ae8b75f018a8cd666 Mon Sep 17 00:00:00 2001 From: suckatrash Date: Mon, 2 May 2022 13:46:21 -0700 Subject: [PATCH 20/24] (DIO-3134) Scan repo with Snyk --- .github/workflows/snyk_scan.yaml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/snyk_scan.yaml diff --git a/.github/workflows/snyk_scan.yaml b/.github/workflows/snyk_scan.yaml new file mode 100644 index 0000000..a83b827 --- /dev/null +++ b/.github/workflows/snyk_scan.yaml @@ -0,0 +1,23 @@ +name: Snyk Scan +on: + workflow_dispatch: + push: + branches: + - master +jobs: + security: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: setup ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + - name: create lock + run: bundle lock + - name: Run Snyk to check for vulnerabilities + uses: snyk/actions/ruby@master + env: + SNYK_TOKEN: ${{ secrets.SNYK_DIO_KEY }} + with: + command: monitor \ No newline at end of file From 5be58b1e82166b51147dcf8030df2b64c885081b Mon Sep 17 00:00:00 2001 From: Gene Liverman Date: Fri, 20 Jan 2023 08:43:09 -0500 Subject: [PATCH 21/24] Update code owners to RE --- CODEOWNERS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 7d43104..9767b61 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1,2 @@ -* @puppetlabs/dio +* @puppetlabs/release-engineering + From 6acbc08abacd91bd5fd83fab7b57fbef80085de5 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Fri, 10 Feb 2023 16:40:40 -0500 Subject: [PATCH 22/24] Add mend scanning. Update test and release actions --- .github/dependabot.yml | 3 +-- .github/workflows/release.yml | 39 ++++++++++++++++++++++++++++++++ .github/workflows/security.yml | 39 ++++++++++++++++++++++++++++++++ .github/workflows/snyk_scan.yaml | 23 ------------------- .github/workflows/test.yml | 26 --------------------- .github/workflows/testing.yml | 25 ++++++++++++++++++++ 6 files changed, 104 insertions(+), 51 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/security.yml delete mode 100644 .github/workflows/snyk_scan.yaml delete mode 100644 .github/workflows/test.yml create mode 100644 .github/workflows/testing.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c8f8016..81e0069 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,6 +3,5 @@ updates: - package-ecosystem: bundler directory: "/" schedule: - interval: daily - time: "13:00" + interval: weekly open-pull-requests-limit: 10 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..866f9a7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: Release + +on: workflow_dispatch + +jobs: + release: + runs-on: ubuntu-latest + if: github.repository == 'puppetlabs/beaker-vmpooler' + steps: + - uses: actions/checkout@v3 + - name: Get Version + id: gv + run: | + version=$(grep VERSION lib/beaker-vmpooler/version.rb |rev |cut -d "'" -f2 |rev) + echo "version=$version" >> $GITHUB_OUTPUT + echo "Found version $version from lib/beaker-vmpooler/version.rb" + - name: Tag Release + uses: ncipollo/release-action@v1 + with: + tag: ${{ steps.gv.outputs.version }} + token: ${{ secrets.GITHUB_TOKEN }} + draft: false + prerelease: false + generateReleaseNotes: true + - name: Install Ruby 2.7 + uses: ruby/setup-ruby@v1 + with: + ruby-version: '2.7' + - name: Build gem + run: gem build *.gemspec + - name: Publish gem + run: | + mkdir -p $HOME/.gem + touch $HOME/.gem/credentials + chmod 0600 $HOME/.gem/credentials + printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials + gem push *.gem + env: + GEM_HOST_API_KEY: '${{ secrets.RUBYGEMS_AUTH_TOKEN }}' diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml new file mode 100644 index 0000000..666c602 --- /dev/null +++ b/.github/workflows/security.yml @@ -0,0 +1,39 @@ +name: Security +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + scan: + name: Mend Scanning + runs-on: ubuntu-latest + steps: + - name: checkout repo content + uses: actions/checkout@v3 + with: + fetch-depth: 1 + - name: setup ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + # setup a package lock if one doesn't exist, otherwise do nothing + - name: check lock + run: '[ -f "Gemfile.lock" ] && echo "package lock file exists, skipping" || bundle lock' + # install java + - uses: actions/setup-java@v3 + with: + distribution: 'temurin' # See 'Supported distributions' for available options + java-version: '17' + # download mend + - name: download_mend + run: curl -o wss-unified-agent.jar https://unified-agent.s3.amazonaws.com/wss-unified-agent.jar + - name: run mend + run: java -jar wss-unified-agent.jar + env: + WS_APIKEY: ${{ secrets.MEND_API_KEY }} + WS_WSS_URL: https://saas-eu.whitesourcesoftware.com/agent + WS_USERKEY: ${{ secrets.MEND_TOKEN }} + WS_PRODUCTNAME: RE + WS_PROJECTNAME: ${{ github.event.repository.name }} diff --git a/.github/workflows/snyk_scan.yaml b/.github/workflows/snyk_scan.yaml deleted file mode 100644 index a83b827..0000000 --- a/.github/workflows/snyk_scan.yaml +++ /dev/null @@ -1,23 +0,0 @@ -name: Snyk Scan -on: - workflow_dispatch: - push: - branches: - - master -jobs: - security: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - - name: setup ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: 2.7 - - name: create lock - run: bundle lock - - name: Run Snyk to check for vulnerabilities - uses: snyk/actions/ruby@master - env: - SNYK_TOKEN: ${{ secrets.SNYK_DIO_KEY }} - with: - command: monitor \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 21bafc6..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Test - -on: - - pull_request - - push - -jobs: - test: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - ruby: - - "2.5" - - "2.6" - - "2.7" - name: Ruby ${{ matrix.ruby }} - steps: - - uses: actions/checkout@v2 - - name: Install Ruby ${{ matrix.ruby }} - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ matrix.ruby }} - bundler-cache: true - - name: Run tests - run: bundle exec rake test:spec diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 0000000..67c6596 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,25 @@ +name: Testing + +on: + pull_request: + branches: + - main + +jobs: + spec_tests: + runs-on: ubuntu-latest + strategy: + matrix: + ruby-version: + - '2.7' + - '3.0' + - '3.1' + steps: + - uses: actions/checkout@v3 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby-version }} + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + - name: Run spec tests + run: bundle exec rake test From 4f5ee09807d0dca40ff9207c644d28c3d254b705 Mon Sep 17 00:00:00 2001 From: Michael Hashizume Date: Mon, 27 Mar 2023 13:59:30 -0700 Subject: [PATCH 23/24] (PUP-11786) Beaker 5 compatibility Vox Pupuli has released Beaker 5, which drops older (< 2.7) Ruby compatibility and adds compatibility for Ruby 3.2 This commit adds testing for Ruby 3.2, sets the dependency on Beaker to ~> 5.0, replaces the File#exists? method that's been deprecated since Ruby 2.7 and removed in 3.2, and updates the dependency on FakeFS to the same version that Beaker uses (FakeFS ~> 2.4). --- .github/workflows/testing.yml | 1 + Gemfile | 8 ++------ beaker-vmpooler.gemspec | 7 +------ 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 67c6596..ba73c0c 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -14,6 +14,7 @@ jobs: - '2.7' - '3.0' - '3.1' + - '3.2' steps: - uses: actions/checkout@v3 - name: Set up Ruby diff --git a/Gemfile b/Gemfile index bbec26f..171cfb9 100644 --- a/Gemfile +++ b/Gemfile @@ -2,8 +2,6 @@ source ENV['GEM_SOURCE'] || "https://rubygems.org" gemspec :development_group => :acceptance_testing - - def location_for(place, fake_version = nil) if place =~ /^(git:[^#]*)#(.*)/ [fake_version, { :git => $1, :branch => $2, :require => false }].compact @@ -14,15 +12,13 @@ def location_for(place, fake_version = nil) end end - # We don't put beaker in as a test dependency because we # don't want to create a transitive dependency group :acceptance_testing do - gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 4.0') + gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 5.0') gem "beaker-abs" end - -if File.exists? "#{__FILE__}.local" +if File.exist? "#{__FILE__}.local" eval(File.read("#{__FILE__}.local"), binding) end diff --git a/beaker-vmpooler.gemspec b/beaker-vmpooler.gemspec index fccd267..43c6e88 100644 --- a/beaker-vmpooler.gemspec +++ b/beaker-vmpooler.gemspec @@ -20,12 +20,7 @@ Gem::Specification.new do |s| # Testing dependencies s.add_development_dependency 'rspec', '~> 3.0' s.add_development_dependency 'rspec-its' - # pin fakefs for Ruby < 2.3 - if RUBY_VERSION < "2.3" - s.add_development_dependency 'fakefs', '~> 0.6', '< 0.14' - else - s.add_development_dependency 'fakefs', '~> 0.6' - end + s.add_development_dependency 'fakefs', '~> 2.4' s.add_development_dependency 'rake', '~> 13.0' s.add_development_dependency 'simplecov' s.add_development_dependency 'pry', '~> 0.10' From c027b1bcef47f7027a7958110d2c036c0ae03454 Mon Sep 17 00:00:00 2001 From: Michael Hashizume Date: Tue, 28 May 2024 09:54:41 -0700 Subject: [PATCH 24/24] Add support for Beaker 6 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 171cfb9..ebabf9b 100644 --- a/Gemfile +++ b/Gemfile @@ -15,7 +15,7 @@ end # We don't put beaker in as a test dependency because we # don't want to create a transitive dependency group :acceptance_testing do - gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 5.0') + gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '>= 5.0', '< 7') gem "beaker-abs" end