From fc54949e8dfa8a24c7d78dc923b1c95bc7fbd369 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 04:57:45 +0000 Subject: [PATCH 001/114] Update rubocop requirement from ~> 1.28.2 to ~> 1.50.1 Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.28.2...v1.50.1) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 21 ++++++++++++--------- vmpooler.gemspec | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 47e79e4..a3e9637 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -43,6 +43,8 @@ GEM ffi (1.15.5-java) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) + json (2.6.3) + json (2.6.3-java) method_source (1.0.0) mock_redis (0.36.0) ruby2_keywords @@ -89,7 +91,7 @@ GEM opentelemetry-semantic_conventions (1.8.0) opentelemetry-api (~> 1.0) parallel (1.22.1) - parser (3.2.1.0) + parser (3.2.2.0) ast (~> 2.4.1) pickup (0.0.11) prometheus-client (2.1.0) @@ -127,18 +129,19 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-support (3.12.0) - rubocop (1.28.2) + rubocop (1.50.1) + json (~> 2.3) parallel (~> 1.10) - parser (>= 3.1.0.0) + parser (>= 3.2.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.17.0, < 2.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.27.0) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.28.0) parser (>= 3.2.1.0) - ruby-progressbar (1.12.0) + ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) simplecov (0.22.0) docile (~> 1.1) @@ -175,7 +178,7 @@ DEPENDENCIES pry rack-test (>= 0.6) rspec (>= 3.2) - rubocop (~> 1.28.2) + rubocop (~> 1.50.1) simplecov (>= 0.11.2) thor (~> 1.0, >= 1.0.1) vmpooler! diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 9e3fb3a..567623a 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -43,7 +43,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' - s.add_development_dependency 'rubocop', '~> 1.28.2' + s.add_development_dependency 'rubocop', '~> 1.50.1' s.add_development_dependency 'simplecov', '>= 0.11.2' s.add_development_dependency 'thor', '~> 1.0', '>= 1.0.1' s.add_development_dependency 'yarjuf', '>= 2.0' From 974ae8a72dc4c61a75c3d6c4fa0dd5bcc75cf20d Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Wed, 19 Apr 2023 16:55:13 -0400 Subject: [PATCH 002/114] Bump jruby to 9.4.2.0 --- .github/workflows/release.yml | 4 ++-- .github/workflows/testing.yml | 4 ++-- release-prep | 2 +- update-gemfile-lock | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6989bdb..1b060b0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -70,10 +70,10 @@ jobs: prerelease: false # This step should closely match what is used in `docker/Dockerfile` in vmpooler-deployment - - name: Install Ruby jruby-9.4.1.0 + - name: Install Ruby jruby-9.4.2.0 uses: ruby/setup-ruby@v1 with: - ruby-version: 'jruby-9.4.1.0' + ruby-version: 'jruby-9.4.2.0' - name: Build gem run: gem build *.gemspec diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index eac55b3..54dab4b 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -18,7 +18,7 @@ jobs: strategy: matrix: ruby-version: - - 'jruby-9.4.1.0' + - 'jruby-9.4.2.0' steps: - uses: actions/checkout@v3 - name: Set up Ruby @@ -34,7 +34,7 @@ jobs: strategy: matrix: ruby-version: - - 'jruby-9.4.1.0' + - 'jruby-9.4.2.0' steps: - uses: actions/checkout@v3 - name: Set up Ruby diff --git a/release-prep b/release-prep index 63a3d6e..9f7ecc3 100755 --- a/release-prep +++ b/release-prep @@ -5,7 +5,7 @@ # Update Gemfile.lock docker run -it --rm \ -v $(pwd):/app \ - jruby:9.4.1.0-jdk11 \ + jruby:9.4.2.0-jdk11 \ /bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"' # Update Changelog diff --git a/update-gemfile-lock b/update-gemfile-lock index 46c4873..68ea73f 100755 --- a/update-gemfile-lock +++ b/update-gemfile-lock @@ -3,5 +3,5 @@ # The container tag should closely match what is used in `docker/Dockerfile` in vmpooler-deployment docker run -it --rm \ -v $(pwd):/app \ - jruby:9.4.1.0-jdk11 \ + jruby:9.4.2.0-jdk11 \ /bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3 && bundle update; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"' From 5aa201547fdeaef7cfaf3e2f4a98bcf8bd87e415 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 12:35:16 +0000 Subject: [PATCH 003/114] Update opentelemetry-exporter-jaeger requirement from = 0.20.1 to = 0.22.0 Updates the requirements on [opentelemetry-exporter-jaeger](https://github.com/open-telemetry/opentelemetry-ruby) to permit the latest version. - [Release notes](https://github.com/open-telemetry/opentelemetry-ruby/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-ruby/blob/main/exporter/jaeger/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-ruby/compare/opentelemetry-exporter-jaeger/v0.20.1...opentelemetry-exporter-jaeger/v0.22.0) --- updated-dependencies: - dependency-name: opentelemetry-exporter-jaeger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 11 ++++++----- vmpooler.gemspec | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 47e79e4..24c6743 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,7 +6,7 @@ PATH connection_pool (~> 2.2) deep_merge (~> 1.2) net-ldap (~> 0.16) - opentelemetry-exporter-jaeger (= 0.20.1) + opentelemetry-exporter-jaeger (= 0.22.0) opentelemetry-instrumentation-concurrent_ruby (= 0.19.2) opentelemetry-instrumentation-http_client (= 0.19.4) opentelemetry-instrumentation-redis (= 0.21.3) @@ -54,10 +54,11 @@ GEM opentelemetry-api (1.1.0) opentelemetry-common (0.19.6) opentelemetry-api (~> 1.0) - opentelemetry-exporter-jaeger (0.20.1) - opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.2) - opentelemetry-sdk (~> 1.0) + opentelemetry-exporter-jaeger (0.22.0) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.19.6) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions thrift opentelemetry-instrumentation-base (0.19.0) opentelemetry-api (~> 1.0) diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 9e3fb3a..90f8889 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |s| s.add_dependency 'connection_pool', '~> 2.2' s.add_dependency 'deep_merge', '~> 1.2' s.add_dependency 'net-ldap', '~> 0.16' - s.add_dependency 'opentelemetry-exporter-jaeger', '= 0.20.1' + s.add_dependency 'opentelemetry-exporter-jaeger', '= 0.22.0' s.add_dependency 'opentelemetry-instrumentation-concurrent_ruby', '= 0.19.2' s.add_dependency 'opentelemetry-instrumentation-http_client', '= 0.19.4' s.add_dependency 'opentelemetry-instrumentation-redis', '= 0.21.3' From f34ebf62117c97651e6d40125202387f0fff0da5 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Thu, 20 Apr 2023 08:51:32 -0400 Subject: [PATCH 004/114] Migrate issue management to Jira --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index a05bcec..4d629a3 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ - [Running docker-compose inside Vagrant](#running-docker-compose-inside-vagrant) - [URLs when using docker-compose](#urls-when-using-docker-compose) - [Update the Gemfile Lock](#update-the-gemfile-lock) + - [Submitting Issues](#submitting-issues) - [Releasing](#releasing) - [License](#license) @@ -200,6 +201,10 @@ To update the `Gemfile.lock` run `./update-gemfile-lock`. Verify, and update if needed, that the docker tag in the script and GitHub action workflows matches what is used in the [vmpooler-deployment Dockerfile](https://github.com/puppetlabs/vmpooler-deployment/blob/main/docker/Dockerfile). +## Submitting Issues + +Please file any issues or requests in Jira at where project development is tracked across all VMPooler related components. + ## Releasing Follow these steps to publish a new GitHub release, and build and push the gem to . From 6f92388aa7e66e77f91bc343e0036c9df4b01e2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 19:52:18 +0000 Subject: [PATCH 005/114] Update opentelemetry-resource_detectors requirement from = 0.19.1 to = 0.23.0 Updates the requirements on [opentelemetry-resource_detectors](https://github.com/open-telemetry/opentelemetry-ruby-contrib) to permit the latest version. - [Release notes](https://github.com/open-telemetry/opentelemetry-ruby-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-ruby-contrib/blob/main/resource_detectors/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-ruby-contrib/compare/opentelemetry-resource_detectors/v0.19.1...opentelemetry-resource_detectors/v0.23.0) --- updated-dependencies: - dependency-name: opentelemetry-resource_detectors dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- vmpooler.gemspec | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 24c6743..791791e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ PATH opentelemetry-instrumentation-http_client (= 0.19.4) opentelemetry-instrumentation-redis (= 0.21.3) opentelemetry-instrumentation-sinatra (= 0.19.3) - opentelemetry-resource_detectors (= 0.19.1) + opentelemetry-resource_detectors (= 0.23.0) opentelemetry-sdk (~> 1.0, >= 1.0.2) pickup (~> 0.0.11) prometheus-client (~> 2.0) @@ -79,9 +79,9 @@ GEM opentelemetry-instrumentation-base (~> 0.19.0) opentelemetry-registry (0.2.0) opentelemetry-api (~> 1.1) - opentelemetry-resource_detectors (0.19.1) + opentelemetry-resource_detectors (0.23.0) google-cloud-env - opentelemetry-sdk + opentelemetry-sdk (~> 1.0) opentelemetry-sdk (1.2.0) opentelemetry-api (~> 1.1) opentelemetry-common (~> 0.19.3) diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 90f8889..2d0c91e 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |s| s.add_dependency 'opentelemetry-instrumentation-http_client', '= 0.19.4' s.add_dependency 'opentelemetry-instrumentation-redis', '= 0.21.3' s.add_dependency 'opentelemetry-instrumentation-sinatra', '= 0.19.3' - s.add_dependency 'opentelemetry-resource_detectors', '= 0.19.1' + s.add_dependency 'opentelemetry-resource_detectors', '= 0.23.0' s.add_dependency 'opentelemetry-sdk', '~> 1.0', '>= 1.0.2' s.add_dependency 'pickup', '~> 0.0.11' s.add_dependency 'prometheus-client', '~> 2.0' From 2dee9e9fcae88a3bb805db8e6c1975cbbb698b91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 20:21:20 +0000 Subject: [PATCH 006/114] Update rack requirement from ~> 2.2 to >= 2.2, < 4.0 Updates the requirements on [rack](https://github.com/rack/rack) to permit the latest version. - [Release notes](https://github.com/rack/rack/releases) - [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md) - [Commits](https://github.com/rack/rack/compare/v2.2.6.2...v2.2.6.4) --- updated-dependencies: - dependency-name: rack dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- vmpooler.gemspec | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 791791e..81e09e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -16,7 +16,7 @@ PATH pickup (~> 0.0.11) prometheus-client (~> 2.0) puma (~> 5.0, >= 5.0.4) - rack (~> 2.2) + rack (>= 2.2, < 4.0) rake (~> 13.0) redis (~> 4.1) sinatra (~> 2.0) @@ -105,7 +105,7 @@ GEM nio4r (~> 2.0) puma (5.6.5-java) nio4r (~> 2.0) - rack (2.2.6.2) + rack (2.2.6.4) rack-protection (2.2.4) rack rack-test (2.0.2) diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 2d0c91e..7d6b526 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -30,7 +30,7 @@ Gem::Specification.new do |s| s.add_dependency 'pickup', '~> 0.0.11' s.add_dependency 'prometheus-client', '~> 2.0' s.add_dependency 'puma', '~> 5.0', '>= 5.0.4' - s.add_dependency 'rack', '~> 2.2' + s.add_dependency 'rack', '>= 2.2', '< 4.0' s.add_dependency 'rake', '~> 13.0' s.add_dependency 'redis', '~> 4.1' s.add_dependency 'sinatra', '~> 2.0' From 76e53f61444840103653cf7355032252f1826f1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:09:37 +0000 Subject: [PATCH 007/114] Update prometheus-client requirement from ~> 2.0 to >= 2, < 5 Updates the requirements on [prometheus-client](https://github.com/prometheus/client_ruby) to permit the latest version. - [Release notes](https://github.com/prometheus/client_ruby/releases) - [Changelog](https://github.com/prometheus/client_ruby/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_ruby/compare/v2.1.0...v4.1.0) --- updated-dependencies: - dependency-name: prometheus-client dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- vmpooler.gemspec | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 81e09e5..338c537 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -14,7 +14,7 @@ PATH opentelemetry-resource_detectors (= 0.23.0) opentelemetry-sdk (~> 1.0, >= 1.0.2) pickup (~> 0.0.11) - prometheus-client (~> 2.0) + prometheus-client (>= 2, < 5) puma (~> 5.0, >= 5.0.4) rack (>= 2.2, < 4.0) rake (~> 13.0) @@ -93,7 +93,7 @@ GEM parser (3.2.1.0) ast (~> 2.4.1) pickup (0.0.11) - prometheus-client (2.1.0) + prometheus-client (4.1.0) pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 7d6b526..2860593 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |s| s.add_dependency 'opentelemetry-resource_detectors', '= 0.23.0' s.add_dependency 'opentelemetry-sdk', '~> 1.0', '>= 1.0.2' s.add_dependency 'pickup', '~> 0.0.11' - s.add_dependency 'prometheus-client', '~> 2.0' + s.add_dependency 'prometheus-client', '>= 2', '< 5' s.add_dependency 'puma', '~> 5.0', '>= 5.0.4' s.add_dependency 'rack', '>= 2.2', '< 4.0' s.add_dependency 'rake', '~> 13.0' From 0e3817790e820ee728a13887b3dfb31dc62aa369 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:09:45 +0000 Subject: [PATCH 008/114] Bump rack-test from 2.0.2 to 2.1.0 Bumps [rack-test](https://github.com/rack/rack-test) from 2.0.2 to 2.1.0. - [Release notes](https://github.com/rack/rack-test/releases) - [Changelog](https://github.com/rack/rack-test/blob/main/History.md) - [Commits](https://github.com/rack/rack-test/compare/v2.0.2...v2.1.0) --- updated-dependencies: - dependency-name: rack-test dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 81e09e5..a2d96d6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -108,7 +108,7 @@ GEM rack (2.2.6.4) rack-protection (2.2.4) rack - rack-test (2.0.2) + rack-test (2.1.0) rack (>= 1.3) rainbow (3.1.1) rake (13.0.6) From 8042ba559286cca9776a27fe9897b42c07f3bdaf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:09:49 +0000 Subject: [PATCH 009/114] Update sinatra requirement from ~> 2.0 to >= 2, < 4 Updates the requirements on [sinatra](https://github.com/sinatra/sinatra) to permit the latest version. - [Release notes](https://github.com/sinatra/sinatra/releases) - [Changelog](https://github.com/sinatra/sinatra/blob/main/CHANGELOG.md) - [Commits](https://github.com/sinatra/sinatra/compare/v2.2.4...v3.0.6) --- updated-dependencies: - dependency-name: sinatra dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 14 +++++++------- vmpooler.gemspec | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 81e09e5..f736780 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -19,7 +19,7 @@ PATH rack (>= 2.2, < 4.0) rake (~> 13.0) redis (~> 4.1) - sinatra (~> 2.0) + sinatra (>= 2, < 4) spicy-proton (~> 2.1) statsd-ruby (~> 1.4) @@ -46,7 +46,7 @@ GEM method_source (1.0.0) mock_redis (0.36.0) ruby2_keywords - mustermann (2.0.2) + mustermann (3.0.0) ruby2_keywords (~> 0.0.1) net-ldap (0.17.1) nio4r (2.5.8) @@ -106,7 +106,7 @@ GEM puma (5.6.5-java) nio4r (~> 2.0) rack (2.2.6.4) - rack-protection (2.2.4) + rack-protection (3.0.6) rack rack-test (2.0.2) rack (>= 1.3) @@ -147,10 +147,10 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) simplecov_json_formatter (0.1.4) - sinatra (2.2.4) - mustermann (~> 2.0) - rack (~> 2.2) - rack-protection (= 2.2.4) + sinatra (3.0.6) + mustermann (~> 3.0) + rack (~> 2.2, >= 2.2.4) + rack-protection (= 3.0.6) tilt (~> 2.0) spicy-proton (2.1.15) bindata (~> 2.3) diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 7d6b526..7a7f21e 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -33,7 +33,7 @@ Gem::Specification.new do |s| s.add_dependency 'rack', '>= 2.2', '< 4.0' s.add_dependency 'rake', '~> 13.0' s.add_dependency 'redis', '~> 4.1' - s.add_dependency 'sinatra', '~> 2.0' + s.add_dependency 'sinatra', '>= 2', '< 4' s.add_dependency 'spicy-proton', '~> 2.1' s.add_dependency 'statsd-ruby', '~> 1.4' From 6826b1717a473dd6b9e5be0898bb987c70e0f3c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:36:37 +0000 Subject: [PATCH 010/114] Update puma requirement from ~> 5.0, >= 5.0.4 to >= 5.0.4, < 7 Updates the requirements on [puma](https://github.com/puma/puma) to permit the latest version. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.6.5...v6.2.2) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 10 +++++----- vmpooler.gemspec | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f385628..294af4b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -15,7 +15,7 @@ PATH opentelemetry-sdk (~> 1.0, >= 1.0.2) pickup (~> 0.0.11) prometheus-client (>= 2, < 5) - puma (~> 5.0, >= 5.0.4) + puma (>= 5.0.4, < 7) rack (>= 2.2, < 4.0) rake (~> 13.0) redis (~> 4.1) @@ -49,8 +49,8 @@ GEM mustermann (3.0.0) ruby2_keywords (~> 0.0.1) net-ldap (0.17.1) - nio4r (2.5.8) - nio4r (2.5.8-java) + nio4r (2.5.9) + nio4r (2.5.9-java) opentelemetry-api (1.1.0) opentelemetry-common (0.19.6) opentelemetry-api (~> 1.0) @@ -101,9 +101,9 @@ GEM coderay (~> 1.1) method_source (~> 1.0) spoon (~> 0.0) - puma (5.6.5) + puma (6.2.2) nio4r (~> 2.0) - puma (5.6.5-java) + puma (6.2.2-java) nio4r (~> 2.0) rack (2.2.6.4) rack-protection (3.0.6) diff --git a/vmpooler.gemspec b/vmpooler.gemspec index ee3dfec..6e8d72e 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |s| s.add_dependency 'opentelemetry-sdk', '~> 1.0', '>= 1.0.2' s.add_dependency 'pickup', '~> 0.0.11' s.add_dependency 'prometheus-client', '>= 2', '< 5' - s.add_dependency 'puma', '~> 5.0', '>= 5.0.4' + s.add_dependency 'puma', '>= 5.0.4', '< 7' s.add_dependency 'rack', '>= 2.2', '< 4.0' s.add_dependency 'rake', '~> 13.0' s.add_dependency 'redis', '~> 4.1' From 3c7821dd22e2966ebe657b648f2e4198157f5091 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 12:35:57 +0000 Subject: [PATCH 011/114] Bump net-ldap from 0.17.1 to 0.18.0 Bumps [net-ldap](https://github.com/ruby-ldap/ruby-net-ldap) from 0.17.1 to 0.18.0. - [Release notes](https://github.com/ruby-ldap/ruby-net-ldap/releases) - [Changelog](https://github.com/ruby-ldap/ruby-net-ldap/blob/master/History.rdoc) - [Commits](https://github.com/ruby-ldap/ruby-net-ldap/compare/v0.17.1...v0.18.0) --- updated-dependencies: - dependency-name: net-ldap dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 294af4b..379305e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,7 +48,7 @@ GEM ruby2_keywords mustermann (3.0.0) ruby2_keywords (~> 0.0.1) - net-ldap (0.17.1) + net-ldap (0.18.0) nio4r (2.5.9) nio4r (2.5.9-java) opentelemetry-api (1.1.0) From 649aef7339df3870399c6fa695b7f057f5431a9a Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Fri, 21 Apr 2023 08:43:11 -0400 Subject: [PATCH 012/114] Rubocop fix: Style/SlicingWithRange --- lib/vmpooler/api/v3.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vmpooler/api/v3.rb b/lib/vmpooler/api/v3.rb index 4e8f6e9..3b629dc 100644 --- a/lib/vmpooler/api/v3.rb +++ b/lib/vmpooler/api/v3.rb @@ -302,7 +302,7 @@ module Vmpooler # Very simple filter for Litmus jobs - just count them coming through for the moment. metrics.increment("usage_litmus.#{user}.#{operation}.#{poolname}") else - url_parts = jenkins_build_url.split('/')[2..-1] + url_parts = jenkins_build_url.split('/')[2..] jenkins_instance = url_parts[0].gsub('.', '_') value_stream_parts = url_parts[2].split('_') value_stream_parts = value_stream_parts.map { |s| s.gsub('.', '_') } From 6c280604991c2b4ebaafbfedc67cff243998b030 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 04:57:14 +0000 Subject: [PATCH 013/114] Bump rubocop from 1.50.1 to 1.50.2 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.50.1 to 1.50.2. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.50.1...v1.50.2) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 98e0bf5..3838d06 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,7 +91,7 @@ GEM opentelemetry-semantic_conventions opentelemetry-semantic_conventions (1.8.0) opentelemetry-api (~> 1.0) - parallel (1.22.1) + parallel (1.23.0) parser (3.2.2.0) ast (~> 2.4.1) pickup (0.0.11) @@ -115,7 +115,7 @@ GEM rainbow (3.1.1) rake (13.0.6) redis (4.8.1) - regexp_parser (2.7.0) + regexp_parser (2.8.0) rexml (3.2.5) rspec (3.12.0) rspec-core (~> 3.12.0) @@ -130,7 +130,7 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-support (3.12.0) - rubocop (1.50.1) + rubocop (1.50.2) json (~> 2.3) parallel (~> 1.10) parser (>= 3.2.0.0) From f7e5d5e207ed9936470109d0f2800a291c700cc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 May 2023 04:57:07 +0000 Subject: [PATCH 014/114] Bump rack from 2.2.6.4 to 2.2.7 Bumps [rack](https://github.com/rack/rack) from 2.2.6.4 to 2.2.7. - [Release notes](https://github.com/rack/rack/releases) - [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md) - [Commits](https://github.com/rack/rack/compare/v2.2.6.4...v2.2.7) --- updated-dependencies: - dependency-name: rack dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 3838d06..bdc3c0e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -107,7 +107,7 @@ GEM nio4r (~> 2.0) puma (6.2.2-java) nio4r (~> 2.0) - rack (2.2.6.4) + rack (2.2.7) rack-protection (3.0.6) rack rack-test (2.1.0) From 92ad13cd0403f8c0294a5a692f9dba1b418a3078 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Mon, 1 May 2023 08:19:29 -0400 Subject: [PATCH 015/114] 3.1.0 release prep --- CHANGELOG.md | 19 +++++++++++++++++++ Gemfile.lock | 2 +- lib/vmpooler/version.rb | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36567ee..ace9e9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [3.1.0](https://github.com/puppetlabs/vmpooler/tree/3.1.0) (2023-04-28) + +[Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.0.0...3.1.0) + +**Merged pull requests:** + +- Bump rubocop from 1.50.1 to 1.50.2 [\#578](https://github.com/puppetlabs/vmpooler/pull/578) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update puma requirement from ~\> 5.0, \>= 5.0.4 to \>= 5.0.4, \< 7 [\#577](https://github.com/puppetlabs/vmpooler/pull/577) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update opentelemetry-resource\_detectors requirement from = 0.19.1 to = 0.23.0 [\#576](https://github.com/puppetlabs/vmpooler/pull/576) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Migrate issue management to Jira [\#575](https://github.com/puppetlabs/vmpooler/pull/575) ([yachub](https://github.com/yachub)) +- Bump jruby to 9.4.2.0 [\#574](https://github.com/puppetlabs/vmpooler/pull/574) ([yachub](https://github.com/yachub)) +- Update rubocop requirement from ~\> 1.28.2 to ~\> 1.50.1 [\#573](https://github.com/puppetlabs/vmpooler/pull/573) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update sinatra requirement from ~\> 2.0 to \>= 2, \< 4 [\#572](https://github.com/puppetlabs/vmpooler/pull/572) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump net-ldap from 0.17.1 to 0.18.0 [\#571](https://github.com/puppetlabs/vmpooler/pull/571) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update prometheus-client requirement from ~\> 2.0 to \>= 2, \< 5 [\#566](https://github.com/puppetlabs/vmpooler/pull/566) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump rack-test from 2.0.2 to 2.1.0 [\#564](https://github.com/puppetlabs/vmpooler/pull/564) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update rack requirement from ~\> 2.2 to \>= 2.2, \< 4.0 [\#562](https://github.com/puppetlabs/vmpooler/pull/562) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update opentelemetry-exporter-jaeger requirement from = 0.20.1 to = 0.22.0 [\#524](https://github.com/puppetlabs/vmpooler/pull/524) ([dependabot[bot]](https://github.com/apps/dependabot)) + ## [3.0.0](https://github.com/puppetlabs/vmpooler/tree/3.0.0) (2023-03-28) [Full Changelog](https://github.com/puppetlabs/vmpooler/compare/2.5.0...3.0.0) diff --git a/Gemfile.lock b/Gemfile.lock index 3838d06..d0c46c8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - vmpooler (3.0.0) + vmpooler (3.1.0) concurrent-ruby (~> 1.1) connection_pool (~> 2.2) deep_merge (~> 1.2) diff --git a/lib/vmpooler/version.rb b/lib/vmpooler/version.rb index 751be5e..d89b368 100644 --- a/lib/vmpooler/version.rb +++ b/lib/vmpooler/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Vmpooler - VERSION = '3.0.0' + VERSION = '3.1.0' end From e7e5269bc14e89fa02c84dea6900543793c41e1b Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Mon, 1 May 2023 08:22:56 -0400 Subject: [PATCH 016/114] Comment changelog validation until jira support is added --- .github/workflows/release.yml | 38 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b060b0..72ea804 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,26 +29,26 @@ jobs: echo "version=$version" >> $GITHUB_OUTPUT echo "Found version $version from lib/vmpooler/version.rb" - - name: Generate Changelog - uses: docker://githubchangeloggenerator/github-changelog-generator:1.16.2 - with: - args: >- - --future-release ${{ steps.nv.outputs.version }} - env: - CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # - name: Generate Changelog + # uses: docker://githubchangeloggenerator/github-changelog-generator:1.16.2 + # with: + # args: >- + # --future-release ${{ steps.nv.outputs.version }} + # env: + # CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Validate Changelog - run : | - set -e - if [[ -n $(git status --porcelain) ]]; then - echo "Here is the current git status:" - git status - echo - echo "The following changes were detected:" - git --no-pager diff - echo "Uncommitted PRs found in the changelog. Please submit a release prep PR of changes after running `./update-changelog`" - exit 1 - fi + # - name: Validate Changelog + # run : | + # set -e + # if [[ -n $(git status --porcelain) ]]; then + # echo "Here is the current git status:" + # git status + # echo + # echo "The following changes were detected:" + # git --no-pager diff + # echo "Uncommitted PRs found in the changelog. Please submit a release prep PR of changes after running `./update-changelog`" + # exit 1 + # fi - name: Generate Release Notes uses: docker://githubchangeloggenerator/github-changelog-generator:1.16.2 From 521dcb30d9baece94c1eeab54e41a38fe899241f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 04:56:51 +0000 Subject: [PATCH 017/114] Bump thor from 1.2.1 to 1.2.2 Bumps [thor](https://github.com/rails/thor) from 1.2.1 to 1.2.2. - [Release notes](https://github.com/rails/thor/releases) - [Commits](https://github.com/rails/thor/compare/v1.2.1...v1.2.2) --- updated-dependencies: - dependency-name: thor dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 3baddc7..1aba354 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -160,7 +160,7 @@ GEM spoon (0.0.6) ffi statsd-ruby (1.5.0) - thor (1.2.1) + thor (1.2.2) thrift (0.18.1) tilt (2.1.0) unicode-display_width (2.4.2) From cfe98a8cbf27e8975c212ebb78c3fdd8e236f144 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 04:58:39 +0000 Subject: [PATCH 018/114] Update rubocop requirement from ~> 1.50.1 to ~> 1.51.0 Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.50.2...v1.51.0) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 8 ++++---- vmpooler.gemspec | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 3baddc7..361f49d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -92,7 +92,7 @@ GEM opentelemetry-semantic_conventions (1.8.0) opentelemetry-api (~> 1.0) parallel (1.23.0) - parser (3.2.2.0) + parser (3.2.2.1) ast (~> 2.4.1) pickup (0.0.11) prometheus-client (4.1.0) @@ -130,7 +130,7 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-support (3.12.0) - rubocop (1.50.2) + rubocop (1.51.0) json (~> 2.3) parallel (~> 1.10) parser (>= 3.2.0.0) @@ -140,7 +140,7 @@ GEM rubocop-ast (>= 1.28.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.28.0) + rubocop-ast (1.28.1) parser (>= 3.2.1.0) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) @@ -179,7 +179,7 @@ DEPENDENCIES pry rack-test (>= 0.6) rspec (>= 3.2) - rubocop (~> 1.50.1) + rubocop (~> 1.51.0) simplecov (>= 0.11.2) thor (~> 1.0, >= 1.0.1) vmpooler! diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 6e93e3c..22b19b6 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -43,7 +43,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' - s.add_development_dependency 'rubocop', '~> 1.50.1' + s.add_development_dependency 'rubocop', '~> 1.51.0' s.add_development_dependency 'simplecov', '>= 0.11.2' s.add_development_dependency 'thor', '~> 1.0', '>= 1.0.1' s.add_development_dependency 'yarjuf', '>= 2.0' From 48dd5226af35ab474ac269249e9c57526d574881 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 04:57:38 +0000 Subject: [PATCH 019/114] Bump connection_pool from 2.4.0 to 2.4.1 Bumps [connection_pool](https://github.com/mperham/connection_pool) from 2.4.0 to 2.4.1. - [Changelog](https://github.com/mperham/connection_pool/blob/main/Changes.md) - [Commits](https://github.com/mperham/connection_pool/commits) --- updated-dependencies: - dependency-name: connection_pool dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 079cf58..7b0c4d7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -32,7 +32,7 @@ GEM climate_control (1.2.0) coderay (1.1.3) concurrent-ruby (1.2.2) - connection_pool (2.4.0) + connection_pool (2.4.1) deep_merge (1.2.2) diff-lcs (1.5.0) docile (1.4.0) From cfdcd20593c5f6df35e9c343978eef8b93d6e1db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jun 2023 04:58:38 +0000 Subject: [PATCH 020/114] Bump puma from 6.2.2 to 6.3.0 Bumps [puma](https://github.com/puma/puma) from 6.2.2 to 6.3.0. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v6.2.2...v6.3.0) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 079cf58..dfdb5b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -103,9 +103,9 @@ GEM coderay (~> 1.1) method_source (~> 1.0) spoon (~> 0.0) - puma (6.2.2) + puma (6.3.0) nio4r (~> 2.0) - puma (6.2.2-java) + puma (6.3.0-java) nio4r (~> 2.0) rack (2.2.7) rack-protection (3.0.6) From ede4deeeaef0eb3f5fc5c4141d2380da411b644f Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Thu, 20 Apr 2023 08:51:32 -0400 Subject: [PATCH 021/114] Revert "Migrate issue management to Jira" This reverts commit f34ebf62117c97651e6d40125202387f0fff0da5. --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 4d629a3..a05bcec 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,6 @@ - [Running docker-compose inside Vagrant](#running-docker-compose-inside-vagrant) - [URLs when using docker-compose](#urls-when-using-docker-compose) - [Update the Gemfile Lock](#update-the-gemfile-lock) - - [Submitting Issues](#submitting-issues) - [Releasing](#releasing) - [License](#license) @@ -201,10 +200,6 @@ To update the `Gemfile.lock` run `./update-gemfile-lock`. Verify, and update if needed, that the docker tag in the script and GitHub action workflows matches what is used in the [vmpooler-deployment Dockerfile](https://github.com/puppetlabs/vmpooler-deployment/blob/main/docker/Dockerfile). -## Submitting Issues - -Please file any issues or requests in Jira at where project development is tracked across all VMPooler related components. - ## Releasing Follow these steps to publish a new GitHub release, and build and push the gem to . From 448f76a1d42ce3fb21ad1000b704ad3920e89fda Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Mon, 1 May 2023 08:22:56 -0400 Subject: [PATCH 022/114] Revert "Comment changelog validation until jira support is added" This reverts commit e7e5269bc14e89fa02c84dea6900543793c41e1b. --- .github/workflows/release.yml | 38 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 72ea804..1b060b0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,26 +29,26 @@ jobs: echo "version=$version" >> $GITHUB_OUTPUT echo "Found version $version from lib/vmpooler/version.rb" - # - name: Generate Changelog - # uses: docker://githubchangeloggenerator/github-changelog-generator:1.16.2 - # with: - # args: >- - # --future-release ${{ steps.nv.outputs.version }} - # env: - # CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Generate Changelog + uses: docker://githubchangeloggenerator/github-changelog-generator:1.16.2 + with: + args: >- + --future-release ${{ steps.nv.outputs.version }} + env: + CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # - name: Validate Changelog - # run : | - # set -e - # if [[ -n $(git status --porcelain) ]]; then - # echo "Here is the current git status:" - # git status - # echo - # echo "The following changes were detected:" - # git --no-pager diff - # echo "Uncommitted PRs found in the changelog. Please submit a release prep PR of changes after running `./update-changelog`" - # exit 1 - # fi + - name: Validate Changelog + run : | + set -e + if [[ -n $(git status --porcelain) ]]; then + echo "Here is the current git status:" + git status + echo + echo "The following changes were detected:" + git --no-pager diff + echo "Uncommitted PRs found in the changelog. Please submit a release prep PR of changes after running `./update-changelog`" + exit 1 + fi - name: Generate Release Notes uses: docker://githubchangeloggenerator/github-changelog-generator:1.16.2 From 9accb2cecb703dfb1aba94b754eb138aa0412d76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 04:24:19 +0000 Subject: [PATCH 023/114] Update rubocop requirement from ~> 1.51.0 to ~> 1.54.2 Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.51.0...v1.54.2) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 17 +++++++++++------ vmpooler.gemspec | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7b0c4d7..da7cb6c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -45,6 +45,7 @@ GEM faraday (>= 0.17.3, < 3.0) json (2.6.3) json (2.6.3-java) + language_server-protocol (3.17.0.3) method_source (1.0.0) mock_redis (0.36.0) ruby2_keywords @@ -92,8 +93,9 @@ GEM opentelemetry-semantic_conventions (1.8.0) opentelemetry-api (~> 1.0) parallel (1.23.0) - parser (3.2.2.1) + parser (3.2.2.3) ast (~> 2.4.1) + racc pickup (0.0.11) prometheus-client (4.1.0) pry (0.14.2) @@ -107,6 +109,8 @@ GEM nio4r (~> 2.0) puma (6.2.2-java) nio4r (~> 2.0) + racc (1.7.1) + racc (1.7.1-java) rack (2.2.7) rack-protection (3.0.6) rack @@ -115,7 +119,7 @@ GEM rainbow (3.1.1) rake (13.0.6) redis (4.8.1) - regexp_parser (2.8.0) + regexp_parser (2.8.1) rexml (3.2.5) rspec (3.12.0) rspec-core (~> 3.12.0) @@ -130,17 +134,18 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-support (3.12.0) - rubocop (1.51.0) + rubocop (1.54.2) json (~> 2.3) + language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.2.0.0) + parser (>= 3.2.2.3) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) rubocop-ast (>= 1.28.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.28.1) + rubocop-ast (1.29.0) parser (>= 3.2.1.0) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) @@ -179,7 +184,7 @@ DEPENDENCIES pry rack-test (>= 0.6) rspec (>= 3.2) - rubocop (~> 1.51.0) + rubocop (~> 1.54.2) simplecov (>= 0.11.2) thor (~> 1.0, >= 1.0.1) vmpooler! diff --git a/vmpooler.gemspec b/vmpooler.gemspec index 22b19b6..cdb865c 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -43,7 +43,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' - s.add_development_dependency 'rubocop', '~> 1.51.0' + s.add_development_dependency 'rubocop', '~> 1.54.2' s.add_development_dependency 'simplecov', '>= 0.11.2' s.add_development_dependency 'thor', '~> 1.0', '>= 1.0.1' s.add_development_dependency 'yarjuf', '>= 2.0' From 5b4a2748bc80c540e7075da5c8fd1b4c7e9e171f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 04:07:00 +0000 Subject: [PATCH 024/114] Update rubocop requirement from ~> 1.54.2 to ~> 1.55.1 Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.54.2...v1.55.1) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 8 ++++---- vmpooler.gemspec | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index da7cb6c..d83a4e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -120,7 +120,7 @@ GEM rake (13.0.6) redis (4.8.1) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.2.6) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -134,7 +134,7 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-support (3.12.0) - rubocop (1.54.2) + rubocop (1.55.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -142,7 +142,7 @@ GEM rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.28.0, < 2.0) + rubocop-ast (>= 1.28.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.29.0) @@ -184,7 +184,7 @@ DEPENDENCIES pry rack-test (>= 0.6) rspec (>= 3.2) - rubocop (~> 1.54.2) + rubocop (~> 1.55.1) simplecov (>= 0.11.2) thor (~> 1.0, >= 1.0.1) vmpooler! diff --git a/vmpooler.gemspec b/vmpooler.gemspec index cdb865c..a7e4250 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -43,7 +43,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' - s.add_development_dependency 'rubocop', '~> 1.54.2' + s.add_development_dependency 'rubocop', '~> 1.55.1' s.add_development_dependency 'simplecov', '>= 0.11.2' s.add_development_dependency 'thor', '~> 1.0', '>= 1.0.1' s.add_development_dependency 'yarjuf', '>= 2.0' From e898f6c39c2f671c4236e8d27f28740c663dbcf9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 04:07:35 +0000 Subject: [PATCH 025/114] Bump prometheus-client from 4.1.0 to 4.2.1 Bumps [prometheus-client](https://github.com/prometheus/client_ruby) from 4.1.0 to 4.2.1. - [Release notes](https://github.com/prometheus/client_ruby/releases) - [Changelog](https://github.com/prometheus/client_ruby/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_ruby/compare/v4.1.0...v4.2.1) --- updated-dependencies: - dependency-name: prometheus-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index da7cb6c..2609b10 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -97,7 +97,7 @@ GEM ast (~> 2.4.1) racc pickup (0.0.11) - prometheus-client (4.1.0) + prometheus-client (4.2.1) pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) From 30820ec115e27fddfffc9a85b75a051c3e6604b9 Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Mon, 7 Aug 2023 08:37:17 -0700 Subject: [PATCH 026/114] (RE-15162) Update Redis gem to version 5 --- Gemfile.lock | 70 ++++++++++++++++------------------ lib/vmpooler.rb | 14 +++++-- lib/vmpooler/pool_manager.rb | 63 ++++++++++++++---------------- spec/unit/pool_manager_spec.rb | 18 ++++++--- vmpooler.gemspec | 5 ++- 5 files changed, 85 insertions(+), 85 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index da7cb6c..ba19548 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,7 +3,7 @@ PATH specs: vmpooler (3.1.0) concurrent-ruby (~> 1.1) - connection_pool (~> 2.2) + connection_pool (~> 2.4) deep_merge (~> 1.2) net-ldap (~> 0.16) opentelemetry-exporter-jaeger (= 0.22.0) @@ -18,7 +18,7 @@ PATH puma (>= 5.0.4, < 7) rack (>= 2.2, < 4.0) rake (~> 13.0) - redis (~> 4.1) + redis (~> 5.0) sinatra (>= 2, < 4) spicy-proton (~> 2.1) statsd-ruby (~> 1.4) @@ -29,6 +29,7 @@ GEM ast (2.4.2) bindata (2.4.15) builder (3.2.4) + byebug (11.1.3) climate_control (1.2.0) coderay (1.1.3) concurrent-ruby (1.2.2) @@ -36,15 +37,13 @@ GEM deep_merge (1.2.2) diff-lcs (1.5.0) docile (1.4.0) - faraday (2.7.4) + faraday (2.7.10) faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) - ffi (1.15.5-java) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) json (2.6.3) - json (2.6.3-java) language_server-protocol (3.17.0.3) method_source (1.0.0) mock_redis (0.36.0) @@ -53,9 +52,8 @@ GEM ruby2_keywords (~> 0.0.1) net-ldap (0.18.0) nio4r (2.5.9) - nio4r (2.5.9-java) - opentelemetry-api (1.1.0) - opentelemetry-common (0.19.6) + opentelemetry-api (1.2.1) + opentelemetry-common (0.19.7) opentelemetry-api (~> 1.0) opentelemetry-exporter-jaeger (0.22.0) opentelemetry-api (~> 1.1) @@ -80,60 +78,59 @@ GEM opentelemetry-api (~> 1.0) opentelemetry-common (~> 0.19.3) opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-registry (0.2.0) + opentelemetry-registry (0.3.0) opentelemetry-api (~> 1.1) opentelemetry-resource_detectors (0.23.0) google-cloud-env opentelemetry-sdk (~> 1.0) - opentelemetry-sdk (1.2.0) + opentelemetry-sdk (1.2.1) opentelemetry-api (~> 1.1) opentelemetry-common (~> 0.19.3) opentelemetry-registry (~> 0.2) opentelemetry-semantic_conventions - opentelemetry-semantic_conventions (1.8.0) + opentelemetry-semantic_conventions (1.10.0) opentelemetry-api (~> 1.0) parallel (1.23.0) parser (3.2.2.3) ast (~> 2.4.1) racc pickup (0.0.11) - prometheus-client (4.1.0) + prometheus-client (4.2.1) pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) - pry (0.14.2-java) - coderay (~> 1.1) - method_source (~> 1.0) - spoon (~> 0.0) - puma (6.2.2) - nio4r (~> 2.0) - puma (6.2.2-java) + pry-byebug (3.10.1) + byebug (~> 11.0) + pry (>= 0.13, < 0.15) + puma (6.3.0) nio4r (~> 2.0) racc (1.7.1) - racc (1.7.1-java) - rack (2.2.7) - rack-protection (3.0.6) - rack + rack (2.2.8) + rack-protection (3.1.0) + rack (~> 2.2, >= 2.2.4) rack-test (2.1.0) rack (>= 1.3) rainbow (3.1.1) rake (13.0.6) - redis (4.8.1) + redis (5.0.6) + redis-client (>= 0.9.0) + redis-client (0.15.0) + connection_pool regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.2.6) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) rspec-mocks (~> 3.12.0) - rspec-core (3.12.1) + rspec-core (3.12.2) rspec-support (~> 3.12.0) - rspec-expectations (3.12.2) + rspec-expectations (3.12.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) - rspec-mocks (3.12.3) + rspec-mocks (3.12.6) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) - rspec-support (3.12.0) + rspec-support (3.12.1) rubocop (1.54.2) json (~> 2.3) language_server-protocol (>= 3.17.0) @@ -155,33 +152,30 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) simplecov_json_formatter (0.1.4) - sinatra (3.0.6) + sinatra (3.1.0) mustermann (~> 3.0) rack (~> 2.2, >= 2.2.4) - rack-protection (= 3.0.6) + rack-protection (= 3.1.0) tilt (~> 2.0) spicy-proton (2.1.15) bindata (~> 2.3) - spoon (0.0.6) - ffi statsd-ruby (1.5.0) thor (1.2.2) thrift (0.18.1) - tilt (2.1.0) + tilt (2.2.0) unicode-display_width (2.4.2) yarjuf (2.0.0) builder rspec (~> 3) PLATFORMS - universal-java-1.8 - universal-java-11 - x86_64-linux + x86_64-darwin-22 DEPENDENCIES climate_control (>= 0.2.0) mock_redis (>= 0.17.0) pry + pry-byebug rack-test (>= 0.6) rspec (>= 3.2) rubocop (~> 1.54.2) @@ -191,4 +185,4 @@ DEPENDENCIES yarjuf (>= 2.0) BUNDLED WITH - 2.3.18 + 2.4.12 diff --git a/lib/vmpooler.rb b/lib/vmpooler.rb index 54c4ffc..197bf4a 100644 --- a/lib/vmpooler.rb +++ b/lib/vmpooler.rb @@ -18,7 +18,7 @@ module Vmpooler # Dependencies for tracing require 'opentelemetry-instrumentation-concurrent_ruby' require 'opentelemetry-instrumentation-http_client' - require 'opentelemetry-instrumentation-redis' + # require 'opentelemetry-instrumentation-redis' require 'opentelemetry-instrumentation-sinatra' require 'opentelemetry-sdk' require 'opentelemetry/exporter/jaeger' @@ -103,7 +103,7 @@ module Vmpooler parsed_config[:redis]['data_ttl'] = string_to_int(ENV['REDIS_DATA_TTL']) || parsed_config[:redis]['data_ttl'] || 168 parsed_config[:redis]['connection_pool_size'] = string_to_int(ENV['REDIS_CONNECTION_POOL_SIZE']) || parsed_config[:redis]['connection_pool_size'] || 10 parsed_config[:redis]['connection_pool_timeout'] = string_to_int(ENV['REDIS_CONNECTION_POOL_TIMEOUT']) || parsed_config[:redis]['connection_pool_timeout'] || 5 - parsed_config[:redis]['reconnect_attempts'] = string_to_int(ENV['REDIS_RECONNECT_ATTEMPTS']) || parsed_config[:redis]['reconnect_attempts'] || 10 + parsed_config[:redis]['reconnect_attempts'] = string_array_to_array(ENV['REDIS_RECONNECT_ATTEMPTS']) || parsed_config[:redis]['reconnect_attempts'] || 10 parsed_config[:statsd] = parsed_config[:statsd] || {} if ENV['STATSD_SERVER'] parsed_config[:statsd]['server'] = ENV['STATSD_SERVER'] if ENV['STATSD_SERVER'] @@ -209,8 +209,7 @@ module Vmpooler end def self.new_redis(host = 'localhost', port = nil, password = nil, redis_reconnect_attempts = 10) - Redis.new(host: host, port: port, password: password, reconnect_attempts: redis_reconnect_attempts, reconnect_delay: 1.5, - reconnect_delay_max: 10.0) + Redis.new(host: host, port: port, password: password, reconnect_attempts: redis_reconnect_attempts, timeout: 5) end def self.pools(conf) @@ -235,6 +234,13 @@ module Vmpooler Integer(s) end + def self.string_array_to_array(s) + # Returns an array from an array like string + return if s.nil? + + JSON.parse(s) + end + def self.true?(obj) obj.to_s.downcase == 'true' end diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index ae1024a..25afb44 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -59,7 +59,7 @@ module Vmpooler currently_configured_pools = [] config[:pools].each do |pool| currently_configured_pools << pool['name'] - redis.sadd('vmpooler__pools', pool['name']) + redis.sadd('vmpooler__pools', pool['name'].to_s) pool_keys = pool.keys pool_keys.delete('alias') to_set = {} @@ -68,11 +68,12 @@ module Vmpooler end to_set['alias'] = pool['alias'].join(',') if to_set.key?('alias') to_set['domain'] = Vmpooler::Dns.get_domain_for_pool(config, pool['name']) - redis.hmset("vmpooler__pool__#{pool['name']}", to_set.to_a.flatten) unless to_set.empty? + + redis.hmset("vmpooler__pool__#{pool['name']}", *to_set.to_a.flatten) unless to_set.empty? end previously_configured_pools.each do |pool| unless currently_configured_pools.include? pool - redis.srem('vmpooler__pools', pool) + redis.srem('vmpooler__pools', pool.to_s) redis.del("vmpooler__pool__#{pool}") end end @@ -129,7 +130,6 @@ module Vmpooler if exists request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id') pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias') if request_id - redis.multi redis.smove("vmpooler__pending__#{pool}", "vmpooler__completed__#{pool}", vm) if request_id ondemandrequest_hash = redis.hgetall("vmpooler__odrequest__#{request_id}") @@ -138,7 +138,6 @@ module Vmpooler redis.zadd('vmpooler__odcreate__task', 1, "#{pool_alias}:#{pool}:1:#{request_id}") end end - redis.exec $metrics.increment("errors.markedasfailed.#{pool}") $logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes") else @@ -428,16 +427,15 @@ module Vmpooler mutex = vm_mutex(new_vmname) mutex.synchronize do @redis.with_metrics do |redis| - # Add VM to Redis inventory ('pending' pool) - redis.multi - redis.sadd("vmpooler__pending__#{pool_name}", new_vmname) - redis.hset("vmpooler__vm__#{new_vmname}", 'clone', Time.now) - redis.hset("vmpooler__vm__#{new_vmname}", 'template', pool_name) # This value is used to represent the pool. - redis.hset("vmpooler__vm__#{new_vmname}", 'pool', pool_name) - redis.hset("vmpooler__vm__#{new_vmname}", 'domain', pool_domain) - redis.hset("vmpooler__vm__#{new_vmname}", 'request_id', request_id) if request_id - redis.hset("vmpooler__vm__#{new_vmname}", 'pool_alias', pool_alias) if pool_alias - redis.exec + redis.multi do |transaction| + transaction.sadd("vmpooler__pending__#{pool_name}", new_vmname) + transaction.hset("vmpooler__vm__#{new_vmname}", 'clone', Time.now.to_s) + transaction.hset("vmpooler__vm__#{new_vmname}", 'template', pool_name) # This value is used to represent the pool. + transaction.hset("vmpooler__vm__#{new_vmname}", 'pool', pool_name) + transaction.hset("vmpooler__vm__#{new_vmname}", 'domain', pool_domain) + transaction.hset("vmpooler__vm__#{new_vmname}", 'request_id', request_id) if request_id + transaction.hset("vmpooler__vm__#{new_vmname}", 'pool_alias', pool_alias) if pool_alias + end end begin @@ -502,7 +500,7 @@ module Vmpooler @redis.with_metrics do |redis| redis.pipelined do |pipeline| pipeline.hdel("vmpooler__active__#{pool}", vm) - pipeline.hset("vmpooler__vm__#{vm}", 'destroy', Time.now) + pipeline.hset("vmpooler__vm__#{vm}", 'destroy', Time.now.to_s) # Auto-expire metadata key pipeline.expire("vmpooler__vm__#{vm}", ($config[:redis]['data_ttl'].to_i * 60 * 60)) @@ -868,12 +866,13 @@ module Vmpooler def sleep_with_wakeup_events(loop_delay, wakeup_period = 5, options = {}) exit_by = Time.now + loop_delay wakeup_by = Time.now + wakeup_period + return if time_passed?(:exit_by, exit_by) @redis.with_metrics do |redis| initial_ready_size = redis.scard("vmpooler__ready__#{options[:poolname]}") if options[:pool_size_change] - initial_clone_target = redis.hget("vmpooler__pool__#{options[:poolname]}", options[:clone_target]) if options[:clone_target_change] + initial_clone_target = redis.hget("vmpooler__pool__#{options[:poolname]}", options[:clone_target].to_s) if options[:clone_target_change] initial_template = redis.hget('vmpooler__template__prepared', options[:poolname]) if options[:pool_template_change] @@ -912,16 +911,15 @@ module Vmpooler end if options[:pending_vm] - pending_vm_count = redis.scard("vmpooler__pending__#{options[:poolname]}") + pending_vm_count = redis.scard("vmpooler__pending__#{options[:poolname]}") break unless pending_vm_count == 0 end if options[:ondemand_request] - redis.multi - redis.zcard('vmpooler__provisioning__request') - redis.zcard('vmpooler__provisioning__processing') - redis.zcard('vmpooler__odcreate__task') - od_request, od_processing, od_createtask = redis.exec + od_request = redis.zcard('vmpooler__provisioning__request') + od_processing = redis.zcard('vmpooler__provisioning__processing') + od_createtask = redis.zcard('vmpooler__odcreate__task') + break unless od_request == 0 break unless od_processing == 0 break unless od_createtask == 0 @@ -1093,10 +1091,8 @@ module Vmpooler def remove_excess_vms(pool) @redis.with_metrics do |redis| - redis.multi - redis.scard("vmpooler__ready__#{pool['name']}") - redis.scard("vmpooler__pending__#{pool['name']}") - ready, pending = redis.exec + ready = redis.scard("vmpooler__ready__#{pool['name']}") + pending = redis.scard("vmpooler__pending__#{pool['name']}") total = pending.to_i + ready.to_i break if total.nil? break if total == 0 @@ -1334,12 +1330,11 @@ module Vmpooler return if pool_mutex(pool_name).locked? @redis.with_metrics do |redis| - redis.multi - redis.scard("vmpooler__ready__#{pool_name}") - redis.scard("vmpooler__pending__#{pool_name}") - redis.scard("vmpooler__running__#{pool_name}") - ready, pending, running = redis.exec - total = pending.to_i + ready.to_i + ready = redis.scard("vmpooler__ready__#{pool_name}") + pending = redis.scard("vmpooler__pending__#{pool_name}") + running = redis.scard("vmpooler__running__#{pool_name}") + + total = pending.to_i + ready.to_i $metrics.gauge("ready.#{pool_name}", ready) $metrics.gauge("running.#{pool_name}", running) @@ -1594,11 +1589,9 @@ module Vmpooler return unless vms_ready?(request_id, redis) - redis.multi redis.hset(ondemand_hash_key, 'status', 'ready') redis.expire(ondemand_hash_key, default_expiration) redis.zrem(processing_key, request_id) - redis.exec end def request_expired?(request_id, score, redis) diff --git a/spec/unit/pool_manager_spec.rb b/spec/unit/pool_manager_spec.rb index 0e9c5e6..742ea54 100644 --- a/spec/unit/pool_manager_spec.rb +++ b/spec/unit/pool_manager_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' require 'time' require 'mock_redis' +require 'pry' +require 'pry-byebug' # Custom RSpec :Matchers @@ -3594,8 +3596,9 @@ EOT it 'should sleep until the provisioning request is detected' do redis_connection_pool.with do |redis| expect(subject).to receive(:sleep).exactly(3).times - expect(redis).to receive(:multi).and_return('OK').exactly(3).times - expect(redis).to receive(:exec).and_return([0,0,0],[0,0,0],[1,0,0]) + expect(redis).to receive(:zcard).with('vmpooler__provisioning__request').and_return(0,0,1) + expect(redis).to receive(:zcard).with('vmpooler__provisioning__processing').and_return(0,0,0) + expect(redis).to receive(:zcard).with('vmpooler__odcreate__task').and_return(0,0,0) end subject.sleep_with_wakeup_events(loop_delay, wakeup_period, wakeup_option) @@ -3604,17 +3607,20 @@ EOT it 'should sleep until provisioning processing is detected' do redis_connection_pool.with do |redis| expect(subject).to receive(:sleep).exactly(3).times - expect(redis).to receive(:multi).and_return('OK').exactly(3).times - expect(redis).to receive(:exec).and_return([0,0,0],[0,0,0],[0,1,0]) + expect(redis).to receive(:zcard).with('vmpooler__provisioning__request').and_return(0,0,0) + expect(redis).to receive(:zcard).with('vmpooler__provisioning__processing').and_return(0,0,1) + expect(redis).to receive(:zcard).with('vmpooler__odcreate__task').and_return(0,0,0) end + subject.sleep_with_wakeup_events(loop_delay, wakeup_period, wakeup_option) end it 'should sleep until ondemand creation task is detected' do redis_connection_pool.with do |redis| expect(subject).to receive(:sleep).exactly(3).times - expect(redis).to receive(:multi).and_return('OK').exactly(3).times - expect(redis).to receive(:exec).and_return([0,0,0],[0,0,0],[0,0,1]) + expect(redis).to receive(:zcard).with('vmpooler__provisioning__request').and_return(0,0,0) + expect(redis).to receive(:zcard).with('vmpooler__provisioning__processing').and_return(0,0,0) + expect(redis).to receive(:zcard).with('vmpooler__odcreate__task').and_return(0,0,1) end subject.sleep_with_wakeup_events(loop_delay, wakeup_period, wakeup_option) diff --git a/vmpooler.gemspec b/vmpooler.gemspec index cdb865c..e997b11 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -17,7 +17,7 @@ Gem::Specification.new do |s| s.executables = 'vmpooler' s.require_paths = ["lib"] s.add_dependency 'concurrent-ruby', '~> 1.1' - s.add_dependency 'connection_pool', '~> 2.2' + s.add_dependency 'connection_pool', '~> 2.4' s.add_dependency 'deep_merge', '~> 1.2' s.add_dependency 'net-ldap', '~> 0.16' s.add_dependency 'opentelemetry-exporter-jaeger', '= 0.22.0' @@ -32,7 +32,7 @@ Gem::Specification.new do |s| s.add_dependency 'puma', '>= 5.0.4', '< 7' s.add_dependency 'rack', '>= 2.2', '< 4.0' s.add_dependency 'rake', '~> 13.0' - s.add_dependency 'redis', '~> 4.1' + s.add_dependency 'redis', '~> 5.0' s.add_dependency 'sinatra', '>= 2', '< 4' s.add_dependency 'spicy-proton', '~> 2.1' s.add_dependency 'statsd-ruby', '~> 1.4' @@ -41,6 +41,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'climate_control', '>= 0.2.0' s.add_development_dependency 'mock_redis', '>= 0.17.0' s.add_development_dependency 'pry' + s.add_development_dependency 'pry-byebug' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' s.add_development_dependency 'rubocop', '~> 1.54.2' From 46156fd85f4e0ef5fa0fd7a6273353947a4a66ce Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Tue, 8 Aug 2023 11:05:55 -0700 Subject: [PATCH 027/114] Convert Times to strings when being added to redis. --- Gemfile.lock | 18 +++++++++++++----- lib/vmpooler.rb | 2 +- lib/vmpooler/api/helpers.rb | 2 +- lib/vmpooler/api/v3.rb | 6 +++--- lib/vmpooler/pool_manager.rb | 16 ++++++++-------- spec/unit/pool_manager_spec.rb | 2 -- vmpooler.gemspec | 1 - 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ba19548..d59fc9d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -29,7 +29,6 @@ GEM ast (2.4.2) bindata (2.4.15) builder (3.2.4) - byebug (11.1.3) climate_control (1.2.0) coderay (1.1.3) concurrent-ruby (1.2.2) @@ -41,9 +40,11 @@ GEM faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) + ffi (1.15.5-java) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) json (2.6.3) + json (2.6.3-java) language_server-protocol (3.17.0.3) method_source (1.0.0) mock_redis (0.36.0) @@ -52,6 +53,7 @@ GEM ruby2_keywords (~> 0.0.1) net-ldap (0.18.0) nio4r (2.5.9) + nio4r (2.5.9-java) opentelemetry-api (1.2.1) opentelemetry-common (0.19.7) opentelemetry-api (~> 1.0) @@ -99,12 +101,16 @@ GEM pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) - pry-byebug (3.10.1) - byebug (~> 11.0) - pry (>= 0.13, < 0.15) + pry (0.14.2-java) + coderay (~> 1.1) + method_source (~> 1.0) + spoon (~> 0.0) puma (6.3.0) nio4r (~> 2.0) + puma (6.3.0-java) + nio4r (~> 2.0) racc (1.7.1) + racc (1.7.1-java) rack (2.2.8) rack-protection (3.1.0) rack (~> 2.2, >= 2.2.4) @@ -159,6 +165,8 @@ GEM tilt (~> 2.0) spicy-proton (2.1.15) bindata (~> 2.3) + spoon (0.0.6) + ffi statsd-ruby (1.5.0) thor (1.2.2) thrift (0.18.1) @@ -169,13 +177,13 @@ GEM rspec (~> 3) PLATFORMS + universal-java-11 x86_64-darwin-22 DEPENDENCIES climate_control (>= 0.2.0) mock_redis (>= 0.17.0) pry - pry-byebug rack-test (>= 0.6) rspec (>= 3.2) rubocop (~> 1.54.2) diff --git a/lib/vmpooler.rb b/lib/vmpooler.rb index 197bf4a..02a6a85 100644 --- a/lib/vmpooler.rb +++ b/lib/vmpooler.rb @@ -18,7 +18,7 @@ module Vmpooler # Dependencies for tracing require 'opentelemetry-instrumentation-concurrent_ruby' require 'opentelemetry-instrumentation-http_client' - # require 'opentelemetry-instrumentation-redis' + require 'opentelemetry-instrumentation-redis' require 'opentelemetry-instrumentation-sinatra' require 'opentelemetry-sdk' require 'opentelemetry/exporter/jaeger' diff --git a/lib/vmpooler/api/helpers.rb b/lib/vmpooler/api/helpers.rb index e393466..c6351a9 100644 --- a/lib/vmpooler/api/helpers.rb +++ b/lib/vmpooler/api/helpers.rb @@ -25,7 +25,7 @@ module Vmpooler def validate_token(backend) tracer.in_span("Vmpooler::API::Helpers.#{__method__}") do if valid_token?(backend) - backend.hset("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}", 'last', Time.now) + backend.hset("vmpooler__token__#{request.env['HTTP_X_AUTH_TOKEN']}", 'last', Time.now.to_s) return true end diff --git a/lib/vmpooler/api/v3.rb b/lib/vmpooler/api/v3.rb index 3b629dc..41c6480 100644 --- a/lib/vmpooler/api/v3.rb +++ b/lib/vmpooler/api/v3.rb @@ -189,8 +189,8 @@ module Vmpooler span.set_attribute('enduser.id', user) has_token_result = has_token? backend.sadd("vmpooler__migrating__#{template}", vm) - backend.hset("vmpooler__active__#{template}", vm, Time.now) - backend.hset("vmpooler__vm__#{vm}", 'checkout', Time.now) + backend.hset("vmpooler__active__#{template}", vm, Time.now.to_s) + backend.hset("vmpooler__vm__#{vm}", 'checkout', Time.now.to_s) if Vmpooler::API.settings.config[:auth] and has_token_result backend.hset("vmpooler__vm__#{vm}", 'token:token', request.env['HTTP_X_AUTH_TOKEN']) @@ -971,7 +971,7 @@ module Vmpooler result['token'] = o[rand(25)] + (0...31).map { o[rand(o.length)] }.join backend.hset("vmpooler__token__#{result['token']}", 'user', @auth.username) - backend.hset("vmpooler__token__#{result['token']}", 'created', Time.now) + backend.hset("vmpooler__token__#{result['token']}", 'created', Time.now.to_s) span = OpenTelemetry::Trace.current_span span.set_attribute('enduser.id', @auth.username) diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index 25afb44..a4fd3b2 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -167,8 +167,8 @@ module Vmpooler pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias') redis.pipelined do |pipeline| - pipeline.hset("vmpooler__active__#{pool}", vm, Time.now) - pipeline.hset("vmpooler__vm__#{vm}", 'checkout', Time.now) + pipeline.hset("vmpooler__active__#{pool}", vm, Time.now.to_s) + pipeline.hset("vmpooler__vm__#{vm}", 'checkout', Time.now.to_s) if ondemandrequest_hash['token:token'] pipeline.hset("vmpooler__vm__#{vm}", 'token:token', ondemandrequest_hash['token:token']) pipeline.hset("vmpooler__vm__#{vm}", 'token:user', ondemandrequest_hash['token:user']) @@ -184,10 +184,10 @@ module Vmpooler redis.pipelined do |pipeline| pipeline.hset("vmpooler__boot__#{Date.today}", "#{pool}:#{vm}", finish) # maybe remove as this is never used by vmpooler itself? - pipeline.hset("vmpooler__vm__#{vm}", 'ready', Time.now) + pipeline.hset("vmpooler__vm__#{vm}", 'ready', Time.now.to_s) # last boot time is displayed in API, and used by alarming script - pipeline.hset('vmpooler__lastboot', pool, Time.now) + pipeline.hset('vmpooler__lastboot', pool, Time.now.to_s) end $metrics.timing("time_to_ready_state.#{pool}", finish) @@ -226,7 +226,7 @@ module Vmpooler last_checked_too_soon = ((Time.now - Time.parse(check_stamp)).to_i < $config[:config]['vm_checktime'] * 60) if check_stamp break if check_stamp && last_checked_too_soon - redis.hset("vmpooler__vm__#{vm}", 'check', Time.now) + redis.hset("vmpooler__vm__#{vm}", 'check', Time.now.to_s) # Check if the hosts TTL has expired # if 'boottime' is nil, set bootime to beginning of unix epoch, forces TTL to be assumed expired boottime = redis.hget("vmpooler__vm__#{vm}", 'ready') @@ -911,7 +911,7 @@ module Vmpooler end if options[:pending_vm] - pending_vm_count = redis.scard("vmpooler__pending__#{options[:poolname]}") + pending_vm_count = redis.scard("vmpooler__pending__#{options[:poolname]}") break unless pending_vm_count == 0 end @@ -1333,8 +1333,8 @@ module Vmpooler ready = redis.scard("vmpooler__ready__#{pool_name}") pending = redis.scard("vmpooler__pending__#{pool_name}") running = redis.scard("vmpooler__running__#{pool_name}") - - total = pending.to_i + ready.to_i + + total = pending.to_i + ready.to_i $metrics.gauge("ready.#{pool_name}", ready) $metrics.gauge("running.#{pool_name}", running) diff --git a/spec/unit/pool_manager_spec.rb b/spec/unit/pool_manager_spec.rb index 742ea54..8561896 100644 --- a/spec/unit/pool_manager_spec.rb +++ b/spec/unit/pool_manager_spec.rb @@ -1,8 +1,6 @@ require 'spec_helper' require 'time' require 'mock_redis' -require 'pry' -require 'pry-byebug' # Custom RSpec :Matchers diff --git a/vmpooler.gemspec b/vmpooler.gemspec index e997b11..c3ba291 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -41,7 +41,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'climate_control', '>= 0.2.0' s.add_development_dependency 'mock_redis', '>= 0.17.0' s.add_development_dependency 'pry' - s.add_development_dependency 'pry-byebug' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' s.add_development_dependency 'rubocop', '~> 1.54.2' From c1808632c8d04056188e9e3cd24843c835293fd6 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Wed, 9 Aug 2023 10:04:51 -0400 Subject: [PATCH 028/114] Do not attempt loading DNS classes if none are defined --- lib/vmpooler/pool_manager.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index ae1024a..7a9cb56 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -1447,13 +1447,15 @@ module Vmpooler end def create_dns_object(config, logger, metrics, redis_connection_pool, dns_class, dns_name, options) - dns_klass = Vmpooler::PoolManager::Dns - dns_klass.constants.each do |classname| - next unless classname.to_s.casecmp(dns_class) == 0 + if defined?(Vmpooler::PoolManager::Dns) + dns_klass = Vmpooler::PoolManager::Dns + dns_klass.constants.each do |classname| + next unless classname.to_s.casecmp(dns_class) == 0 - return dns_klass.const_get(classname).new(config, logger, metrics, redis_connection_pool, dns_name, options) + return dns_klass.const_get(classname).new(config, logger, metrics, redis_connection_pool, dns_name, options) + end + raise("DNS '#{dns_class}' is unknown for pool with dns name '#{dns_name}'") if dns_klass.nil? end - raise("DNS '#{dns_class}' is unknown for pool with dns name '#{dns_name}'") if dns_klass.nil? end def check_ondemand_requests(maxloop = 0, From 7cc3fbd519594eea92f5eae5d080370940b9df77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Aug 2023 20:36:55 +0000 Subject: [PATCH 029/114] Bump rack from 2.2.7 to 2.2.8 Bumps [rack](https://github.com/rack/rack) from 2.2.7 to 2.2.8. - [Release notes](https://github.com/rack/rack/releases) - [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md) - [Commits](https://github.com/rack/rack/compare/v2.2.7...v2.2.8) --- updated-dependencies: - dependency-name: rack dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4969a05..b650c65 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -111,7 +111,7 @@ GEM nio4r (~> 2.0) racc (1.7.1) racc (1.7.1-java) - rack (2.2.7) + rack (2.2.8) rack-protection (3.0.6) rack rack-test (2.1.0) From 68aeaa2df9bc4485790f6f1f31309bd8887685bd Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Thu, 10 Aug 2023 07:00:14 -0400 Subject: [PATCH 030/114] Bump jruby to 9.4.3.0 and update lockfile --- .github/workflows/release.yml | 4 ++-- .github/workflows/testing.yml | 4 ++-- Gemfile.lock | 33 ++++++++++++++++----------------- release-prep | 2 +- update-gemfile-lock | 2 +- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b060b0..058b2cd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -70,10 +70,10 @@ jobs: prerelease: false # This step should closely match what is used in `docker/Dockerfile` in vmpooler-deployment - - name: Install Ruby jruby-9.4.2.0 + - name: Install Ruby jruby-9.4.3.0 uses: ruby/setup-ruby@v1 with: - ruby-version: 'jruby-9.4.2.0' + ruby-version: 'jruby-9.4.3.0' - name: Build gem run: gem build *.gemspec diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 54dab4b..105fc8e 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -18,7 +18,7 @@ jobs: strategy: matrix: ruby-version: - - 'jruby-9.4.2.0' + - 'jruby-9.4.3.0' steps: - uses: actions/checkout@v3 - name: Set up Ruby @@ -34,7 +34,7 @@ jobs: strategy: matrix: ruby-version: - - 'jruby-9.4.2.0' + - 'jruby-9.4.3.0' steps: - uses: actions/checkout@v3 - name: Set up Ruby diff --git a/Gemfile.lock b/Gemfile.lock index b650c65..f8bc809 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -36,7 +36,7 @@ GEM deep_merge (1.2.2) diff-lcs (1.5.0) docile (1.4.0) - faraday (2.7.4) + faraday (2.7.10) faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) @@ -47,15 +47,14 @@ GEM json (2.6.3-java) language_server-protocol (3.17.0.3) method_source (1.0.0) - mock_redis (0.36.0) - ruby2_keywords + mock_redis (0.37.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) net-ldap (0.18.0) nio4r (2.5.9) nio4r (2.5.9-java) - opentelemetry-api (1.1.0) - opentelemetry-common (0.19.6) + opentelemetry-api (1.2.1) + opentelemetry-common (0.19.7) opentelemetry-api (~> 1.0) opentelemetry-exporter-jaeger (0.22.0) opentelemetry-api (~> 1.1) @@ -80,17 +79,17 @@ GEM opentelemetry-api (~> 1.0) opentelemetry-common (~> 0.19.3) opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-registry (0.2.0) + opentelemetry-registry (0.3.0) opentelemetry-api (~> 1.1) opentelemetry-resource_detectors (0.23.0) google-cloud-env opentelemetry-sdk (~> 1.0) - opentelemetry-sdk (1.2.0) + opentelemetry-sdk (1.2.1) opentelemetry-api (~> 1.1) opentelemetry-common (~> 0.19.3) opentelemetry-registry (~> 0.2) opentelemetry-semantic_conventions - opentelemetry-semantic_conventions (1.8.0) + opentelemetry-semantic_conventions (1.10.0) opentelemetry-api (~> 1.0) parallel (1.23.0) parser (3.2.2.3) @@ -112,8 +111,8 @@ GEM racc (1.7.1) racc (1.7.1-java) rack (2.2.8) - rack-protection (3.0.6) - rack + rack-protection (3.1.0) + rack (~> 2.2, >= 2.2.4) rack-test (2.1.0) rack (>= 1.3) rainbow (3.1.1) @@ -125,15 +124,15 @@ GEM rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) rspec-mocks (~> 3.12.0) - rspec-core (3.12.1) + rspec-core (3.12.2) rspec-support (~> 3.12.0) - rspec-expectations (3.12.2) + rspec-expectations (3.12.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) - rspec-mocks (3.12.3) + rspec-mocks (3.12.6) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) - rspec-support (3.12.0) + rspec-support (3.12.1) rubocop (1.55.1) json (~> 2.3) language_server-protocol (>= 3.17.0) @@ -155,10 +154,10 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) simplecov_json_formatter (0.1.4) - sinatra (3.0.6) + sinatra (3.1.0) mustermann (~> 3.0) rack (~> 2.2, >= 2.2.4) - rack-protection (= 3.0.6) + rack-protection (= 3.1.0) tilt (~> 2.0) spicy-proton (2.1.15) bindata (~> 2.3) @@ -167,7 +166,7 @@ GEM statsd-ruby (1.5.0) thor (1.2.2) thrift (0.18.1) - tilt (2.1.0) + tilt (2.2.0) unicode-display_width (2.4.2) yarjuf (2.0.0) builder diff --git a/release-prep b/release-prep index 9f7ecc3..7b512c2 100755 --- a/release-prep +++ b/release-prep @@ -5,7 +5,7 @@ # Update Gemfile.lock docker run -it --rm \ -v $(pwd):/app \ - jruby:9.4.2.0-jdk11 \ + jruby:9.4.3.0-jdk11 \ /bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"' # Update Changelog diff --git a/update-gemfile-lock b/update-gemfile-lock index 68ea73f..31986cc 100755 --- a/update-gemfile-lock +++ b/update-gemfile-lock @@ -3,5 +3,5 @@ # The container tag should closely match what is used in `docker/Dockerfile` in vmpooler-deployment docker run -it --rm \ -v $(pwd):/app \ - jruby:9.4.2.0-jdk11 \ + jruby:9.4.3.0-jdk11 \ /bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3 && bundle update; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"' From ac578eef15415fb1f4d5806837c104fa9d9108bf Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Thu, 10 Aug 2023 06:15:27 -0700 Subject: [PATCH 031/114] (RE-15162) Update OTEL gems. --- Gemfile.lock | 67 +++++++++++++++++++----------------- lib/vmpooler.rb | 8 ++++- lib/vmpooler/pool_manager.rb | 12 ++++--- vmpooler.gemspec | 16 ++++----- 4 files changed, 58 insertions(+), 45 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d59fc9d..1bd2527 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,13 +6,13 @@ PATH connection_pool (~> 2.4) deep_merge (~> 1.2) net-ldap (~> 0.16) - opentelemetry-exporter-jaeger (= 0.22.0) - opentelemetry-instrumentation-concurrent_ruby (= 0.19.2) - opentelemetry-instrumentation-http_client (= 0.19.4) - opentelemetry-instrumentation-redis (= 0.21.3) - opentelemetry-instrumentation-sinatra (= 0.19.3) - opentelemetry-resource_detectors (= 0.23.0) - opentelemetry-sdk (~> 1.0, >= 1.0.2) + opentelemetry-exporter-jaeger (= 0.23.0) + opentelemetry-instrumentation-concurrent_ruby (= 0.21.1) + opentelemetry-instrumentation-http_client (= 0.22.2) + opentelemetry-instrumentation-redis (= 0.25.3) + opentelemetry-instrumentation-sinatra (= 0.23.2) + opentelemetry-resource_detectors (= 0.24.1) + opentelemetry-sdk (~> 1.3, >= 1.3.0) pickup (~> 0.0.11) prometheus-client (>= 2, < 5) puma (>= 5.0.4, < 7) @@ -47,47 +47,52 @@ GEM json (2.6.3-java) language_server-protocol (3.17.0.3) method_source (1.0.0) - mock_redis (0.36.0) - ruby2_keywords + mock_redis (0.37.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) net-ldap (0.18.0) nio4r (2.5.9) nio4r (2.5.9-java) opentelemetry-api (1.2.1) - opentelemetry-common (0.19.7) + opentelemetry-common (0.20.0) opentelemetry-api (~> 1.0) - opentelemetry-exporter-jaeger (0.22.0) + opentelemetry-exporter-jaeger (0.23.0) opentelemetry-api (~> 1.1) - opentelemetry-common (~> 0.19.6) + opentelemetry-common (~> 0.20) opentelemetry-sdk (~> 1.2) opentelemetry-semantic_conventions thrift - opentelemetry-instrumentation-base (0.19.0) + opentelemetry-instrumentation-base (0.22.2) opentelemetry-api (~> 1.0) - opentelemetry-instrumentation-concurrent_ruby (0.19.2) + opentelemetry-registry (~> 0.1) + opentelemetry-instrumentation-concurrent_ruby (0.21.1) opentelemetry-api (~> 1.0) - opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-instrumentation-http_client (0.19.4) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-http_client (0.22.2) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) - opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-instrumentation-redis (0.21.3) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (0.23.4) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) - opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-instrumentation-sinatra (0.19.3) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-redis (0.25.3) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) - opentelemetry-instrumentation-base (~> 0.19.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-sinatra (0.23.2) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (~> 0.21) opentelemetry-registry (0.3.0) opentelemetry-api (~> 1.1) - opentelemetry-resource_detectors (0.23.0) + opentelemetry-resource_detectors (0.24.1) google-cloud-env opentelemetry-sdk (~> 1.0) - opentelemetry-sdk (1.2.1) + opentelemetry-sdk (1.3.0) opentelemetry-api (~> 1.1) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20) opentelemetry-registry (~> 0.2) opentelemetry-semantic_conventions opentelemetry-semantic_conventions (1.10.0) @@ -118,7 +123,7 @@ GEM rack (>= 1.3) rainbow (3.1.1) rake (13.0.6) - redis (5.0.6) + redis (5.0.7) redis-client (>= 0.9.0) redis-client (0.15.0) connection_pool @@ -137,7 +142,7 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-support (3.12.1) - rubocop (1.54.2) + rubocop (1.55.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -145,7 +150,7 @@ GEM rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.28.0, < 2.0) + rubocop-ast (>= 1.28.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.29.0) @@ -186,7 +191,7 @@ DEPENDENCIES pry rack-test (>= 0.6) rspec (>= 3.2) - rubocop (~> 1.54.2) + rubocop (~> 1.55.1) simplecov (>= 0.11.2) thor (~> 1.0, >= 1.0.1) vmpooler! diff --git a/lib/vmpooler.rb b/lib/vmpooler.rb index 02a6a85..5d44d68 100644 --- a/lib/vmpooler.rb +++ b/lib/vmpooler.rb @@ -209,7 +209,13 @@ module Vmpooler end def self.new_redis(host = 'localhost', port = nil, password = nil, redis_reconnect_attempts = 10) - Redis.new(host: host, port: port, password: password, reconnect_attempts: redis_reconnect_attempts, timeout: 5) + Redis.new( + host: host, + port: port, + password: password, + reconnect_attempts: redis_reconnect_attempts, + connect_timeout: 300, + ) end def self.pools(conf) diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index a4fd3b2..3bc020b 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -1442,13 +1442,15 @@ module Vmpooler end def create_dns_object(config, logger, metrics, redis_connection_pool, dns_class, dns_name, options) - dns_klass = Vmpooler::PoolManager::Dns - dns_klass.constants.each do |classname| - next unless classname.to_s.casecmp(dns_class) == 0 + if defined?(Vmpooler::PoolManager::Dns) + dns_klass = Vmpooler::PoolManager::Dns + dns_klass.constants.each do |classname| + next unless classname.to_s.casecmp(dns_class) == 0 - return dns_klass.const_get(classname).new(config, logger, metrics, redis_connection_pool, dns_name, options) + return dns_klass.const_get(classname).new(config, logger, metrics, redis_connection_pool, dns_name, options) + end + raise("DNS '#{dns_class}' is unknown for pool with dns name '#{dns_name}'") if dns_klass.nil? end - raise("DNS '#{dns_class}' is unknown for pool with dns name '#{dns_name}'") if dns_klass.nil? end def check_ondemand_requests(maxloop = 0, diff --git a/vmpooler.gemspec b/vmpooler.gemspec index c3ba291..1b367bd 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -20,13 +20,13 @@ Gem::Specification.new do |s| s.add_dependency 'connection_pool', '~> 2.4' s.add_dependency 'deep_merge', '~> 1.2' s.add_dependency 'net-ldap', '~> 0.16' - s.add_dependency 'opentelemetry-exporter-jaeger', '= 0.22.0' - s.add_dependency 'opentelemetry-instrumentation-concurrent_ruby', '= 0.19.2' - s.add_dependency 'opentelemetry-instrumentation-http_client', '= 0.19.4' - s.add_dependency 'opentelemetry-instrumentation-redis', '= 0.21.3' - s.add_dependency 'opentelemetry-instrumentation-sinatra', '= 0.19.3' - s.add_dependency 'opentelemetry-resource_detectors', '= 0.23.0' - s.add_dependency 'opentelemetry-sdk', '~> 1.0', '>= 1.0.2' + s.add_dependency 'opentelemetry-exporter-jaeger', '= 0.23.0' + s.add_dependency 'opentelemetry-instrumentation-concurrent_ruby', '= 0.21.1' + s.add_dependency 'opentelemetry-instrumentation-http_client', '= 0.22.2' + s.add_dependency 'opentelemetry-instrumentation-redis', '= 0.25.3' + s.add_dependency 'opentelemetry-instrumentation-sinatra', '= 0.23.2' + s.add_dependency 'opentelemetry-resource_detectors', '= 0.24.1' + s.add_dependency 'opentelemetry-sdk', '~> 1.3', '>= 1.3.0' s.add_dependency 'pickup', '~> 0.0.11' s.add_dependency 'prometheus-client', '>= 2', '< 5' s.add_dependency 'puma', '>= 5.0.4', '< 7' @@ -43,7 +43,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' - s.add_development_dependency 'rubocop', '~> 1.54.2' + s.add_development_dependency 'rubocop', '~> 1.55.1' s.add_development_dependency 'simplecov', '>= 0.11.2' s.add_development_dependency 'thor', '~> 1.0', '>= 1.0.1' s.add_development_dependency 'yarjuf', '>= 2.0' From eb1ee0eeee6488096318b970c4934a41e10f398c Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Thu, 10 Aug 2023 06:45:14 -0700 Subject: [PATCH 032/114] (maint) Update opentelemetry gems. --- Gemfile.lock | 59 ++++++++++++++++++++++++++---------------------- vmpooler.gemspec | 14 ++++++------ 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f8bc809..b363452 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,13 +6,13 @@ PATH connection_pool (~> 2.2) deep_merge (~> 1.2) net-ldap (~> 0.16) - opentelemetry-exporter-jaeger (= 0.22.0) - opentelemetry-instrumentation-concurrent_ruby (= 0.19.2) - opentelemetry-instrumentation-http_client (= 0.19.4) - opentelemetry-instrumentation-redis (= 0.21.3) - opentelemetry-instrumentation-sinatra (= 0.19.3) - opentelemetry-resource_detectors (= 0.23.0) - opentelemetry-sdk (~> 1.0, >= 1.0.2) + opentelemetry-exporter-jaeger (= 0.23.0) + opentelemetry-instrumentation-concurrent_ruby (= 0.21.1) + opentelemetry-instrumentation-http_client (= 0.22.2) + opentelemetry-instrumentation-redis (= 0.25.3) + opentelemetry-instrumentation-sinatra (= 0.23.2) + opentelemetry-resource_detectors (= 0.24.1) + opentelemetry-sdk (~> 1.3, >= 1.3.0) pickup (~> 0.0.11) prometheus-client (>= 2, < 5) puma (>= 5.0.4, < 7) @@ -54,39 +54,45 @@ GEM nio4r (2.5.9) nio4r (2.5.9-java) opentelemetry-api (1.2.1) - opentelemetry-common (0.19.7) + opentelemetry-common (0.20.0) opentelemetry-api (~> 1.0) - opentelemetry-exporter-jaeger (0.22.0) + opentelemetry-exporter-jaeger (0.23.0) opentelemetry-api (~> 1.1) - opentelemetry-common (~> 0.19.6) + opentelemetry-common (~> 0.20) opentelemetry-sdk (~> 1.2) opentelemetry-semantic_conventions thrift - opentelemetry-instrumentation-base (0.19.0) + opentelemetry-instrumentation-base (0.22.2) opentelemetry-api (~> 1.0) - opentelemetry-instrumentation-concurrent_ruby (0.19.2) + opentelemetry-registry (~> 0.1) + opentelemetry-instrumentation-concurrent_ruby (0.21.1) opentelemetry-api (~> 1.0) - opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-instrumentation-http_client (0.19.4) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-http_client (0.22.2) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) - opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-instrumentation-redis (0.21.3) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (0.23.4) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) - opentelemetry-instrumentation-base (~> 0.19.0) - opentelemetry-instrumentation-sinatra (0.19.3) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-redis (0.25.3) opentelemetry-api (~> 1.0) - opentelemetry-common (~> 0.19.3) - opentelemetry-instrumentation-base (~> 0.19.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-sinatra (0.23.2) + opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.20.0) + opentelemetry-instrumentation-base (~> 0.22.1) + opentelemetry-instrumentation-rack (~> 0.21) opentelemetry-registry (0.3.0) opentelemetry-api (~> 1.1) - opentelemetry-resource_detectors (0.23.0) + opentelemetry-resource_detectors (0.24.1) google-cloud-env opentelemetry-sdk (~> 1.0) - opentelemetry-sdk (1.2.1) + opentelemetry-sdk (1.3.0) opentelemetry-api (~> 1.1) - opentelemetry-common (~> 0.19.3) + opentelemetry-common (~> 0.20) opentelemetry-registry (~> 0.2) opentelemetry-semantic_conventions opentelemetry-semantic_conventions (1.10.0) @@ -173,7 +179,6 @@ GEM rspec (~> 3) PLATFORMS - universal-java-1.8 universal-java-11 x86_64-linux @@ -190,4 +195,4 @@ DEPENDENCIES yarjuf (>= 2.0) BUNDLED WITH - 2.3.18 + 2.4.18 diff --git a/vmpooler.gemspec b/vmpooler.gemspec index a7e4250..e4e7f45 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -20,13 +20,13 @@ Gem::Specification.new do |s| s.add_dependency 'connection_pool', '~> 2.2' s.add_dependency 'deep_merge', '~> 1.2' s.add_dependency 'net-ldap', '~> 0.16' - s.add_dependency 'opentelemetry-exporter-jaeger', '= 0.22.0' - s.add_dependency 'opentelemetry-instrumentation-concurrent_ruby', '= 0.19.2' - s.add_dependency 'opentelemetry-instrumentation-http_client', '= 0.19.4' - s.add_dependency 'opentelemetry-instrumentation-redis', '= 0.21.3' - s.add_dependency 'opentelemetry-instrumentation-sinatra', '= 0.19.3' - s.add_dependency 'opentelemetry-resource_detectors', '= 0.23.0' - s.add_dependency 'opentelemetry-sdk', '~> 1.0', '>= 1.0.2' + s.add_dependency 'opentelemetry-exporter-jaeger', '= 0.23.0' + s.add_dependency 'opentelemetry-instrumentation-concurrent_ruby', '= 0.21.1' + s.add_dependency 'opentelemetry-instrumentation-http_client', '= 0.22.2' + s.add_dependency 'opentelemetry-instrumentation-redis', '= 0.25.3' + s.add_dependency 'opentelemetry-instrumentation-sinatra', '= 0.23.2' + s.add_dependency 'opentelemetry-resource_detectors', '= 0.24.1' + s.add_dependency 'opentelemetry-sdk', '~> 1.3', '>= 1.3.0' s.add_dependency 'pickup', '~> 0.0.11' s.add_dependency 'prometheus-client', '>= 2', '< 5' s.add_dependency 'puma', '>= 5.0.4', '< 7' From 77ed4775222e422739d138c6eb29d765f542ef20 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Thu, 10 Aug 2023 09:50:58 -0400 Subject: [PATCH 033/114] 3.2.0 release prep --- CHANGELOG.md | 31 ++++++++++++++++++++++++++++++- Gemfile.lock | 2 +- lib/vmpooler/version.rb | 2 +- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ace9e9f..6677af2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,35 @@ # Changelog -## [3.1.0](https://github.com/puppetlabs/vmpooler/tree/3.1.0) (2023-04-28) +## [3.2.0](https://github.com/puppetlabs/vmpooler/tree/3.2.0) (2023-08-10) + +[Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.1.0...3.2.0) + +**Implemented enhancements:** + +- \(maint\) Update opentelemetry gems. [\#606](https://github.com/puppetlabs/vmpooler/pull/606) ([isaac-hammes](https://github.com/isaac-hammes)) +- Bump jruby to 9.4.3.0 and bundle update [\#604](https://github.com/puppetlabs/vmpooler/pull/604) ([yachub](https://github.com/yachub)) + +**Fixed bugs:** + +- \(RE-15692\) Do not attempt loading DNS classes if none are defined [\#602](https://github.com/puppetlabs/vmpooler/pull/602) ([yachub](https://github.com/yachub)) + +**Closed issues:** + +- Fix startup error when not using any dns plugins [\#601](https://github.com/puppetlabs/vmpooler/issues/601) + +**Merged pull requests:** + +- Bump prometheus-client from 4.1.0 to 4.2.1 [\#599](https://github.com/puppetlabs/vmpooler/pull/599) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update rubocop requirement from ~\> 1.54.2 to ~\> 1.55.1 [\#597](https://github.com/puppetlabs/vmpooler/pull/597) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump rack from 2.2.7 to 2.2.8 [\#594](https://github.com/puppetlabs/vmpooler/pull/594) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update rubocop requirement from ~\> 1.51.0 to ~\> 1.54.2 [\#593](https://github.com/puppetlabs/vmpooler/pull/593) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump puma from 6.2.2 to 6.3.0 [\#586](https://github.com/puppetlabs/vmpooler/pull/586) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump connection\_pool from 2.4.0 to 2.4.1 [\#583](https://github.com/puppetlabs/vmpooler/pull/583) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Update rubocop requirement from ~\> 1.50.1 to ~\> 1.51.0 [\#582](https://github.com/puppetlabs/vmpooler/pull/582) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump thor from 1.2.1 to 1.2.2 [\#581](https://github.com/puppetlabs/vmpooler/pull/581) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump rack from 2.2.6.4 to 2.2.7 [\#579](https://github.com/puppetlabs/vmpooler/pull/579) ([dependabot[bot]](https://github.com/apps/dependabot)) + +## [3.1.0](https://github.com/puppetlabs/vmpooler/tree/3.1.0) (2023-05-01) [Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.0.0...3.1.0) diff --git a/Gemfile.lock b/Gemfile.lock index b363452..9fd039b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - vmpooler (3.1.0) + vmpooler (3.2.0) concurrent-ruby (~> 1.1) connection_pool (~> 2.2) deep_merge (~> 1.2) diff --git a/lib/vmpooler/version.rb b/lib/vmpooler/version.rb index d89b368..7a5c897 100644 --- a/lib/vmpooler/version.rb +++ b/lib/vmpooler/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Vmpooler - VERSION = '3.1.0' + VERSION = '3.2.0' end From e7322577c7c552400231eecbdeb2f7c821fd95c0 Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Thu, 10 Aug 2023 09:24:17 -0700 Subject: [PATCH 034/114] Fix rubocop --- lib/vmpooler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vmpooler.rb b/lib/vmpooler.rb index 5d44d68..985a72b 100644 --- a/lib/vmpooler.rb +++ b/lib/vmpooler.rb @@ -214,7 +214,7 @@ module Vmpooler port: port, password: password, reconnect_attempts: redis_reconnect_attempts, - connect_timeout: 300, + connect_timeout: 300 ) end From 6ded91e7f6ef5d48183d71142f4c9096083a075c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 04:36:02 +0000 Subject: [PATCH 035/114] Update rubocop requirement from ~> 1.55.1 to ~> 1.56.0 Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.55.1...v1.56.0) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 ++++-- vmpooler.gemspec | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9fd039b..96f9c05 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,6 +27,7 @@ GEM remote: https://rubygems.org/ specs: ast (2.4.2) + base64 (0.1.1) bindata (2.4.15) builder (3.2.4) climate_control (1.2.0) @@ -139,7 +140,8 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-support (3.12.1) - rubocop (1.55.1) + rubocop (1.56.0) + base64 (~> 0.1.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -188,7 +190,7 @@ DEPENDENCIES pry rack-test (>= 0.6) rspec (>= 3.2) - rubocop (~> 1.55.1) + rubocop (~> 1.56.0) simplecov (>= 0.11.2) thor (~> 1.0, >= 1.0.1) vmpooler! diff --git a/vmpooler.gemspec b/vmpooler.gemspec index e4e7f45..98cbecc 100644 --- a/vmpooler.gemspec +++ b/vmpooler.gemspec @@ -43,7 +43,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry' s.add_development_dependency 'rack-test', '>= 0.6' s.add_development_dependency 'rspec', '>= 3.2' - s.add_development_dependency 'rubocop', '~> 1.55.1' + s.add_development_dependency 'rubocop', '~> 1.56.0' s.add_development_dependency 'simplecov', '>= 0.11.2' s.add_development_dependency 'thor', '~> 1.0', '>= 1.0.1' s.add_development_dependency 'yarjuf', '>= 2.0' From 236765709afbfa9a474142c62fdf2f74db302aed Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Tue, 15 Aug 2023 09:24:45 -0700 Subject: [PATCH 036/114] (maint) Release prep for version 3.3.0 --- CHANGELOG.md | 16 ++++++++++++++++ Gemfile.lock | 2 +- lib/vmpooler/version.rb | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6677af2..a38c37f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [3.3.0](https://github.com/puppetlabs/vmpooler/tree/3.3.0) (2023-08-15) + +[Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.2.0...3.3.0) + +**Implemented enhancements:** + +- \(RE-15162\) Update Redis gem to version 5.0. [\#561](https://github.com/puppetlabs/vmpooler/pull/561) ([isaac-hammes](https://github.com/isaac-hammes)) + +**Closed issues:** + +- Redis 5.x Deprecations [\#603](https://github.com/puppetlabs/vmpooler/issues/603) + +**Merged pull requests:** + +- Update rubocop requirement from ~\> 1.55.1 to ~\> 1.56.0 [\#608](https://github.com/puppetlabs/vmpooler/pull/608) ([dependabot[bot]](https://github.com/apps/dependabot)) + ## [3.2.0](https://github.com/puppetlabs/vmpooler/tree/3.2.0) (2023-08-10) [Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.1.0...3.2.0) diff --git a/Gemfile.lock b/Gemfile.lock index 10a0da8..59fe3b6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - vmpooler (3.2.0) + vmpooler (3.3.0) concurrent-ruby (~> 1.1) connection_pool (~> 2.4) deep_merge (~> 1.2) diff --git a/lib/vmpooler/version.rb b/lib/vmpooler/version.rb index 7a5c897..af71ac2 100644 --- a/lib/vmpooler/version.rb +++ b/lib/vmpooler/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Vmpooler - VERSION = '3.2.0' + VERSION = '3.3.0' end From ca5d77c00c8fca14aa7e594686e5b9d52111f026 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Wed, 16 Aug 2023 11:34:10 -0400 Subject: [PATCH 037/114] Update changelog --- CHANGELOG.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a38c37f..f09aed2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,9 @@ # Changelog -## [3.3.0](https://github.com/puppetlabs/vmpooler/tree/3.3.0) (2023-08-15) +## [3.3.0](https://github.com/puppetlabs/vmpooler/tree/3.3.0) (2023-08-16) [Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.2.0...3.3.0) -**Implemented enhancements:** - -- \(RE-15162\) Update Redis gem to version 5.0. [\#561](https://github.com/puppetlabs/vmpooler/pull/561) ([isaac-hammes](https://github.com/isaac-hammes)) - **Closed issues:** - Redis 5.x Deprecations [\#603](https://github.com/puppetlabs/vmpooler/issues/603) From 43f085352b7870721e066b88424c7023261e6892 Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Thu, 17 Aug 2023 13:41:15 -0700 Subject: [PATCH 038/114] (POD-10) Log reason for failed VM checks. --- lib/vmpooler/api/helpers.rb | 12 ------------ lib/vmpooler/pool_manager.rb | 12 +++++++----- spec/unit/pool_manager_spec.rb | 8 ++++---- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/lib/vmpooler/api/helpers.rb b/lib/vmpooler/api/helpers.rb index c6351a9..c56834a 100644 --- a/lib/vmpooler/api/helpers.rb +++ b/lib/vmpooler/api/helpers.rb @@ -551,18 +551,6 @@ module Vmpooler end end end - - def vm_ready?(vm_name, domain = nil) - tracer.in_span("Vmpooler::API::Helpers.#{__method__}") do - begin - open_socket(vm_name, domain) - rescue StandardError => _e - return false - end - - true - end - end end end end diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index 3bc020b..d6735c1 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -103,7 +103,7 @@ module Vmpooler mutex.synchronize do @redis.with_metrics do |redis| request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id') - if provider.vm_ready?(pool, vm) + if provider.vm_ready?(pool, vm, redis) move_pending_vm_to_ready(vm, pool, redis, request_id) else fail_pending_vm(vm, pool, timeout, redis) @@ -130,6 +130,7 @@ module Vmpooler if exists request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id') pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias') if request_id + open_socket_error = redis.hget("vmpooler__vm__#{vm}", 'open_socket_error') redis.smove("vmpooler__pending__#{pool}", "vmpooler__completed__#{pool}", vm) if request_id ondemandrequest_hash = redis.hgetall("vmpooler__odrequest__#{request_id}") @@ -139,7 +140,7 @@ module Vmpooler end end $metrics.increment("errors.markedasfailed.#{pool}") - $logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes") + $logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes with error: #{open_socket_error}") else remove_nonexistent_vm(vm, pool, redis) end @@ -197,11 +198,12 @@ module Vmpooler def vm_still_ready?(pool_name, vm_name, provider, redis) # Check if the VM is still ready/available - return true if provider.vm_ready?(pool_name, vm_name) + return true if provider.vm_ready?(pool_name, vm_name, redis) raise("VM #{vm_name} is not ready") rescue StandardError - move_vm_queue(pool_name, vm_name, 'ready', 'completed', redis, "is unreachable, removed from 'ready' queue") + open_socket_error = redis.hget("vmpooler__vm__#{vm_name}", 'open_socket_error') + move_vm_queue(pool_name, vm_name, 'ready', 'completed', redis, "removed from 'ready' queue. vm unreachable with error: #{open_socket_error}") end def check_ready_vm(vm, pool_name, ttl, provider) @@ -318,7 +320,7 @@ module Vmpooler redis.hset("vmpooler__vm__#{vm}", 'user_tagged', 'true') if success end - throw :stop_checking if provider.vm_ready?(pool, vm) + throw :stop_checking if provider.vm_ready?(pool, vm, redis) throw :stop_checking if provider.get_vm(pool, vm) diff --git a/spec/unit/pool_manager_spec.rb b/spec/unit/pool_manager_spec.rb index 8561896..c0f293d 100644 --- a/spec/unit/pool_manager_spec.rb +++ b/spec/unit/pool_manager_spec.rb @@ -203,8 +203,8 @@ EOT context 'host is in pool' do it 'calls move_pending_vm_to_ready if host is ready' do - expect(provider).to receive(:vm_ready?).with(pool,vm).and_return(true) redis_connection_pool.with do |redis| + expect(provider).to receive(:vm_ready?).with(pool, vm, redis).and_return(true) expect(subject).to receive(:move_pending_vm_to_ready).with(vm, pool, redis, nil) end @@ -212,8 +212,8 @@ EOT end it 'calls fail_pending_vm if host is not ready' do - expect(provider).to receive(:vm_ready?).with(pool,vm).and_return(false) redis_connection_pool.with do |redis| + expect(provider).to receive(:vm_ready?).with(pool, vm, redis).and_return(false) expect(subject).to receive(:fail_pending_vm).with(vm, pool, timeout, redis) end @@ -298,7 +298,7 @@ EOT it 'logs message if VM has exceeded timeout and exists' do redis_connection_pool.with do |redis| redis.hset("vmpooler__vm__#{vm}", 'clone',Date.new(2001,1,1).to_s) - expect(logger).to receive(:log).with('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes") + expect(logger).to receive(:log).with('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes with error: ") expect(subject.fail_pending_vm(vm, pool, timeout, redis, exists: true)).to eq(true) end end @@ -628,7 +628,7 @@ EOT end it 'should log messages about being unreachable' do - expect(logger).to receive(:log).with('d', "[!] [#{pool}] '#{vm}' is unreachable, removed from 'ready' queue") + expect(logger).to receive(:log).with('d', "[!] [#{pool}] '#{vm}' removed from 'ready' queue. vm unreachable with error: ") subject._check_ready_vm(vm, pool, ttl, provider) end From 089071b1b901b5fcf6ab2e7b6f504fa5cc9aa0cd Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Fri, 18 Aug 2023 08:58:37 -0700 Subject: [PATCH 039/114] (maint) Release prep for version 3.4.0 --- CHANGELOG.md | 12 ++++++++++++ Gemfile.lock | 2 +- lib/vmpooler/version.rb | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f09aed2..36ea514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [3.4.0](https://github.com/puppetlabs/vmpooler/tree/3.4.0) (2023-08-18) + +[Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.3.0...3.4.0) + +**Implemented enhancements:** + +- \(POD-10\) Log reason for failed VM checks. [\#611](https://github.com/puppetlabs/vmpooler/pull/611) ([isaac-hammes](https://github.com/isaac-hammes)) + +**Closed issues:** + +- Log reason connection on port 22 of a failed VM [\#609](https://github.com/puppetlabs/vmpooler/issues/609) + ## [3.3.0](https://github.com/puppetlabs/vmpooler/tree/3.3.0) (2023-08-16) [Full Changelog](https://github.com/puppetlabs/vmpooler/compare/3.2.0...3.3.0) diff --git a/Gemfile.lock b/Gemfile.lock index 59fe3b6..b7d1865 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - vmpooler (3.3.0) + vmpooler (3.4.0) concurrent-ruby (~> 1.1) connection_pool (~> 2.4) deep_merge (~> 1.2) diff --git a/lib/vmpooler/version.rb b/lib/vmpooler/version.rb index af71ac2..1ffb7ab 100644 --- a/lib/vmpooler/version.rb +++ b/lib/vmpooler/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Vmpooler - VERSION = '3.3.0' + VERSION = '3.4.0' end From 5146d32bf3c5bee32949666b53fa65d30bbd3991 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Aug 2023 22:16:46 +0000 Subject: [PATCH 040/114] Bump puma from 6.3.0 to 6.3.1 Bumps [puma](https://github.com/puma/puma) from 6.3.0 to 6.3.1. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v6.3.0...v6.3.1) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b7d1865..ccec34f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -111,9 +111,9 @@ GEM coderay (~> 1.1) method_source (~> 1.0) spoon (~> 0.0) - puma (6.3.0) + puma (6.3.1) nio4r (~> 2.0) - puma (6.3.0-java) + puma (6.3.1-java) nio4r (~> 2.0) racc (1.7.1) racc (1.7.1-java) From fdbb0f3a77cf090ee0e88b1930668197fa7f2fa9 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Fri, 18 Aug 2023 17:36:12 -0400 Subject: [PATCH 041/114] Add ability to use bind_as with a service account --- Gemfile.lock | 1 + docs/configuration.md | 12 +++ lib/vmpooler/api/helpers.rb | 30 +++++- spec/unit/api/helpers_spec.rb | 182 ++++++++++++++++++++++------------ vmpooler.yaml.example | 26 +++++ 5 files changed, 185 insertions(+), 66 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b7d1865..199c526 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -184,6 +184,7 @@ GEM rspec (~> 3) PLATFORMS + arm64-darwin-22 universal-java-11 x86_64-linux diff --git a/docs/configuration.md b/docs/configuration.md index e577025..560c328 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -246,6 +246,18 @@ This can be a string providing a single DN. For multiple DNs please specify the The LDAP object-type used to designate a user object. (optional) +### LDAP\_SERVICE_ACCOUNT\_HASH + +A hash containing the following parameters for a service account to perform the +initial bind. After the initial bind, then a search query is performed using the +'base' and 'user_object', then re-binds as the returned user. + +- :user_dn: The full distinguished name (DN) of the service account used to bind. + +- :password: The password for the service account used to bind. + +(optional) + ### SITE\_NAME The name of your deployment. diff --git a/lib/vmpooler/api/helpers.rb b/lib/vmpooler/api/helpers.rb index c56834a..4669b4c 100644 --- a/lib/vmpooler/api/helpers.rb +++ b/lib/vmpooler/api/helpers.rb @@ -68,7 +68,7 @@ module Vmpooler end end - def authenticate_ldap(port, host, encryption_hash, user_object, base, username_str, password_str) + def authenticate_ldap(port, host, encryption_hash, user_object, base, username_str, password_str, service_account_hash = nil) tracer.in_span( "Vmpooler::API::Helpers.#{__method__}", attributes: { @@ -79,6 +79,14 @@ module Vmpooler }, kind: :client ) do + if service_account_hash + username = service_account_hash[:user_dn] + password = service_account_hash[:password] + else + username = "#{user_object}=#{username_str},#{base}" + password = password_str + end + ldap = Net::LDAP.new( :host => host, :port => port, @@ -86,12 +94,22 @@ module Vmpooler :base => base, :auth => { :method => :simple, - :username => "#{user_object}=#{username_str},#{base}", - :password => password_str + :username => username, + :password => password } ) - return true if ldap.bind + if service_account_hash + return true if ldap.bind_as( + :base => base, + :filter => "(#{user_object}=#{username_str})", + :password => password_str + ) + elsif ldap.bind + return true + else + return false + end return false end @@ -116,6 +134,7 @@ module Vmpooler :method => :start_tls, :tls_options => { :ssl_version => 'TLSv1' } } + service_account_hash = auth[:ldap]['service_account_hash'] unless ldap_base.is_a? Array ldap_base = ldap_base.split @@ -134,7 +153,8 @@ module Vmpooler search_user_obj, search_base, username_str, - password_str + password_str, + service_account_hash ) return true if result end diff --git a/spec/unit/api/helpers_spec.rb b/spec/unit/api/helpers_spec.rb index a25ad61..27176e4 100644 --- a/spec/unit/api/helpers_spec.rb +++ b/spec/unit/api/helpers_spec.rb @@ -268,22 +268,62 @@ describe Vmpooler::API::Helpers do :tls_options => { :ssl_version => 'TLSv1' } } end - it 'should attempt ldap authentication' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str) - subject.authenticate(auth, username_str, password_str) + context 'without a service account' do + it 'should attempt ldap authentication' do + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str, nil) + + subject.authenticate(auth, username_str, password_str) + end + + it 'should return true when authentication is successful' do + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str, nil).and_return(true) + + expect(subject.authenticate(auth, username_str, password_str)).to be true + end + + it 'should return false when authentication fails' do + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str, nil).and_return(false) + + expect(subject.authenticate(auth, username_str, password_str)).to be false + end end - it 'should return true when authentication is successful' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str).and_return(true) + context 'with a service account' do + let(:service_account_hash) do + { + :user_dn => 'cn=Service Account,ou=users,dc=example,dc=com', + :password => 's3cr3t' + } + end + let(:auth) { + { + 'provider' => 'ldap', + ldap: { + 'host' => host, + 'base' => base, + 'user_object' => user_object, + 'service_account_hash' => service_account_hash + } + } + } + it 'should attempt ldap authentication' do + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str, service_account_hash) - expect(subject.authenticate(auth, username_str, password_str)).to be true - end + subject.authenticate(auth, username_str, password_str) + end - it 'should return false when authentication fails' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str).and_return(false) + it 'should return true when authentication is successful' do + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str, service_account_hash).and_return(true) - expect(subject.authenticate(auth, username_str, password_str)).to be false + expect(subject.authenticate(auth, username_str, password_str)).to be true + end + + it 'should return false when authentication fails' do + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base, username_str, password_str, service_account_hash).and_return(false) + + expect(subject.authenticate(auth, username_str, password_str)).to be false + end end context 'with an alternate ssl_version' do @@ -298,7 +338,7 @@ describe Vmpooler::API::Helpers do end it 'should specify the alternate ssl_version when authenticating' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, secure_encryption, user_object, base, username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, secure_encryption, user_object, base, username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end @@ -311,7 +351,7 @@ describe Vmpooler::API::Helpers do end it 'should specify the alternate port when authenticating' do - expect(subject).to receive(:authenticate_ldap).with(alternate_port, host, default_encryption, user_object, base, username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(alternate_port, host, default_encryption, user_object, base, username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end @@ -331,7 +371,7 @@ describe Vmpooler::API::Helpers do end it 'should specify the secure port and encryption options when authenticating' do - expect(subject).to receive(:authenticate_ldap).with(secure_port, host, secure_encryption, user_object, base, username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(secure_port, host, secure_encryption, user_object, base, username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end @@ -349,36 +389,36 @@ describe Vmpooler::API::Helpers do end it 'should attempt to bind with each base' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should not search the second base when the first binds' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str).and_return(true) - expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str, nil).and_return(true) + expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should search the second base when the first bind fails' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should return true when any bind succeeds' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str).and_return(true) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str, nil).and_return(true) expect(subject.authenticate(auth, username_str, password_str)).to be true end it 'should return false when all bind attempts fail' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object, base[1], username_str, password_str, nil).and_return(false) expect(subject.authenticate(auth, username_str, password_str)).to be false end @@ -396,36 +436,36 @@ describe Vmpooler::API::Helpers do end it 'should attempt to bind with each user object' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should not search the second user object when the first binds' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str).and_return(true) - expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str, nil).and_return(true) + expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should search the second user object when the first bind fails' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should return true when any bind succeeds' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str).and_return(true) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str, nil).and_return(true) expect(subject.authenticate(auth, username_str, password_str)).to be true end it 'should return false when all bind attempts fail' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base, username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base, username_str, password_str, nil).and_return(false) expect(subject.authenticate(auth, username_str, password_str)).to be false end @@ -450,64 +490,64 @@ describe Vmpooler::API::Helpers do end it 'should attempt to bind with each user object and base' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should not continue searching when the first combination binds' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str).and_return(true) - expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str) - expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str) - expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str, nil).and_return(true) + expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str, nil) + expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str, nil) + expect(subject).to_not receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should search the remaining combinations when the first bind fails' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should search the remaining combinations when the first two binds fail' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str, nil) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should search the remaining combination when the first three binds fail' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str, nil) subject.authenticate(auth, username_str, password_str) end it 'should return true when any bind succeeds' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str).and_return(true) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str, nil).and_return(true) expect(subject.authenticate(auth, username_str, password_str)).to be true end it 'should return false when all bind attempts fail' do - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str).and_return(false) - expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[0], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[0], base[1], username_str, password_str, nil).and_return(false) + expect(subject).to receive(:authenticate_ldap).with(default_port, host, default_encryption, user_object[1], base[1], username_str, password_str, nil).and_return(false) expect(subject.authenticate(auth, username_str, password_str)).to be false end @@ -541,6 +581,12 @@ describe Vmpooler::API::Helpers do :tls_options => { :ssl_version => 'TLSv1' } } end + let(:service_account_hash) do + { + :user_dn => 'cn=Service Account,ou=users,dc=example,dc=com', + :password => 's3cr3t' + } + end let(:ldap) { double('ldap') } it 'should create a new ldap connection' do allow(ldap).to receive(:bind) @@ -572,6 +618,20 @@ describe Vmpooler::API::Helpers do expect(subject.authenticate_ldap(port, host, encryption, user_object, base, username_str, password_str)).to be false end + + it 'should return true when a bind_as is successful' do + expect(Net::LDAP).to receive(:new).and_return(ldap) + expect(ldap).to receive(:bind_as).and_return(true) + + expect(subject.authenticate_ldap(port, host, encryption, user_object, base, username_str, password_str, service_account_hash)).to be true + end + + it 'should return false when a bind_as fails' do + expect(Net::LDAP).to receive(:new).and_return(ldap) + expect(ldap).to receive(:bind_as).and_return(false) + + expect(subject.authenticate_ldap(port, host, encryption, user_object, base, username_str, password_str, service_account_hash)).to be false + end end end diff --git a/vmpooler.yaml.example b/vmpooler.yaml.example index efd0ba7..d1024c2 100644 --- a/vmpooler.yaml.example +++ b/vmpooler.yaml.example @@ -367,6 +367,15 @@ # - user_object # The LDAP object-type used to designate a user object. # +# - service_account_hash +# A hash containing the following parameters for a service account to perform the +# initial bind. After the initial bind, then a search query is performed using the +# 'base' and 'user_object', then re-binds as the returned user. +# - :user_dn +# The full distinguished name (DN) of the service account used to bind. +# - :password +# The password for the service account used to bind. +# # Example: # :auth: # provider: 'ldap' @@ -375,6 +384,23 @@ # port: 389 # base: 'ou=users,dc=company,dc=com' # user_object: 'uid' +# +# :auth: +# provider: 'ldap' +# :ldap: +# host: 'ldap.example.com' +# port: 636 +# service_account_hash: +# :user_dn: 'cn=Service Account,ou=Accounts,dc=ldap,dc=example,dc=com' +# :password: 'service-account-password' +# encryption: +# :method: :simple_tls +# :tls_options: +# :ssl_version: 'TLSv1_2' +# base: +# - 'ou=Accounts,dc=company,dc=com' +# user_object: +# - 'samAccountName' :auth: provider: 'ldap' From 17a1831952d70b95cb458e95e5515d9790a0a6b5 Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Tue, 22 Aug 2023 12:09:17 -0700 Subject: [PATCH 042/114] (POD-8) Add timeout_notification config to log warning before vm is destroyed. --- Gemfile.lock | 1 + .../vmpooler.yaml.dummy-example.aliasedpools | 6 ++ lib/vmpooler.rb | 1 + lib/vmpooler/pool_manager.rb | 73 ++++++++++++------- spec/unit/pool_manager_spec.rb | 51 ++++++------- vmpooler.yaml.dummy-example | 3 + vmpooler.yaml.example | 3 + 7 files changed, 86 insertions(+), 52 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 0d89963..4a94d9c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -186,6 +186,7 @@ GEM PLATFORMS arm64-darwin-22 universal-java-11 + x86_64-darwin-22 x86_64-linux DEPENDENCIES diff --git a/examples/vmpooler.yaml.dummy-example.aliasedpools b/examples/vmpooler.yaml.dummy-example.aliasedpools index ebece50..55bf9ff 100644 --- a/examples/vmpooler.yaml.dummy-example.aliasedpools +++ b/examples/vmpooler.yaml.dummy-example.aliasedpools @@ -17,6 +17,7 @@ logfile: '/Users/samuel/workspace/vmpooler/vmpooler.log' task_limit: 10 timeout: 15 + timeout_notification: 5 vm_checktime: 1 vm_lifetime: 12 vm_lifetime_auth: 24 @@ -38,6 +39,7 @@ datastore: 'vmstorage' size: 5 timeout: 15 + timeout_notification: 5 ready_ttl: 1440 provider: dummy dns_plugin: 'example' @@ -48,6 +50,7 @@ datastore: 'vmstorage' size: 5 timeout: 15 + timeout_notification: 5 ready_ttl: 1440 provider: dummy dns_plugin: 'example' @@ -58,6 +61,7 @@ datastore: 'vmstorage' size: 5 timeout: 15 + timeout_notification: 5 ready_ttl: 1440 provider: dummy dns_plugin: 'example' @@ -67,6 +71,7 @@ datastore: 'vmstorage' size: 5 timeout: 15 + timeout_notification: 5 ready_ttl: 1440 provider: dummy dns_plugin: 'example' @@ -77,6 +82,7 @@ datastore: 'other-vmstorage' size: 5 timeout: 15 + timeout_notification: 5 ready_ttl: 1440 provider: dummy dns_plugin: 'example' diff --git a/lib/vmpooler.rb b/lib/vmpooler.rb index 985a72b..2fcde30 100644 --- a/lib/vmpooler.rb +++ b/lib/vmpooler.rb @@ -82,6 +82,7 @@ module Vmpooler end parsed_config[:config]['clone_target'] = ENV['CLONE_TARGET'] if ENV['CLONE_TARGET'] parsed_config[:config]['timeout'] = string_to_int(ENV['TIMEOUT']) if ENV['TIMEOUT'] + parsed_config[:config]['timeout_notification'] = string_to_int(ENV['TIMEOUT_NOTIFICATION']) if ENV['TIMEOUT_NOTIFICATION'] parsed_config[:config]['vm_lifetime_auth'] = string_to_int(ENV['VM_LIFETIME_AUTH']) if ENV['VM_LIFETIME_AUTH'] parsed_config[:config]['max_tries'] = string_to_int(ENV['MAX_TRIES']) if ENV['MAX_TRIES'] parsed_config[:config]['retry_factor'] = string_to_int(ENV['RETRY_FACTOR']) if ENV['RETRY_FACTOR'] diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index d6735c1..d16db1a 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -82,21 +82,21 @@ module Vmpooler end # Check the state of a VM - def check_pending_vm(vm, pool, timeout, provider) + def check_pending_vm(vm, pool, timeout, timeout_notification, provider) Thread.new do begin - _check_pending_vm(vm, pool, timeout, provider) + _check_pending_vm(vm, pool, timeout, timeout_notification, provider) rescue StandardError => e $logger.log('s', "[!] [#{pool}] '#{vm}' #{timeout} #{provider} errored while checking a pending vm : #{e}") @redis.with_metrics do |redis| - fail_pending_vm(vm, pool, timeout, redis) + fail_pending_vm(vm, pool, timeout, timeout_notification, redis) end raise end end end - def _check_pending_vm(vm, pool, timeout, provider) + def _check_pending_vm(vm, pool, timeout, timeout_notification, provider) mutex = vm_mutex(vm) return if mutex.locked? @@ -106,7 +106,7 @@ module Vmpooler if provider.vm_ready?(pool, vm, redis) move_pending_vm_to_ready(vm, pool, redis, request_id) else - fail_pending_vm(vm, pool, timeout, redis) + fail_pending_vm(vm, pool, timeout, timeout_notification, redis) end end end @@ -122,35 +122,53 @@ module Vmpooler $logger.log('d', "[!] [#{pool}] '#{vm}' no longer exists. Removing from pending.") end - def fail_pending_vm(vm, pool, timeout, redis, exists: true) + def fail_pending_vm(vm, pool, timeout, timeout_notification, redis, exists: true) clone_stamp = redis.hget("vmpooler__vm__#{vm}", 'clone') - time_since_clone = (Time.now - Time.parse(clone_stamp)) / 60 - if time_since_clone > timeout - if exists - request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id') - pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias') if request_id - open_socket_error = redis.hget("vmpooler__vm__#{vm}", 'open_socket_error') - redis.smove("vmpooler__pending__#{pool}", "vmpooler__completed__#{pool}", vm) - if request_id - ondemandrequest_hash = redis.hgetall("vmpooler__odrequest__#{request_id}") - if ondemandrequest_hash && ondemandrequest_hash['status'] != 'failed' && ondemandrequest_hash['status'] != 'deleted' - # will retry a VM that did not come up as vm_ready? only if it has not been market failed or deleted - redis.zadd('vmpooler__odcreate__task', 1, "#{pool_alias}:#{pool}:1:#{request_id}") - end - end - $metrics.increment("errors.markedasfailed.#{pool}") - $logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes with error: #{open_socket_error}") - else + + already_timed_out = time_since_clone > timeout + timing_out_soon = time_since_clone > timeout_notification && !redis.hget("vmpooler__vm__#{vm}", 'timeout_notification') + + if already_timed_out + unless exists remove_nonexistent_vm(vm, pool, redis) + return true end + open_socket_error = handle_timed_out_vm(vm, pool, redis) end + + redis.hset("vmpooler__vm__#{vm}", 'timeout_notification', 1) if timing_out_soon + + nonexist_warning = if already_timed_out + "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes with error: #{open_socket_error}" + elsif timing_out_soon + "[!] [#{pool}] '#{vm}' no longer exists when attempting to send notification of impending failure" + else + "[!] [#{pool}] '#{vm}' This error is wholly unexpected" + end + $logger.log('d', nonexist_warning) true rescue StandardError => e $logger.log('d', "Fail pending VM failed with an error: #{e}") false end + def handle_timed_out_vm(vm, pool, redis) + request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id') + pool_alias = redis.hget("vmpooler__vm__#{vm}", 'pool_alias') if request_id + open_socket_error = redis.hget("vmpooler__vm__#{vm}", 'open_socket_error') + redis.smove("vmpooler__pending__#{pool}", "vmpooler__completed__#{pool}", vm) + if request_id + ondemandrequest_hash = redis.hgetall("vmpooler__odrequest__#{request_id}") + if ondemandrequest_hash && ondemandrequest_hash['status'] != 'failed' && ondemandrequest_hash['status'] != 'deleted' + # will retry a VM that did not come up as vm_ready? only if it has not been market failed or deleted + redis.zadd('vmpooler__odcreate__task', 1, "#{pool_alias}:#{pool}:1:#{request_id}") + end + end + $metrics.increment("errors.markedasfailed.#{pool}") + open_socket_error + end + def move_pending_vm_to_ready(vm, pool, redis, request_id = nil) clone_time = redis.hget("vmpooler__vm__#{vm}", 'clone') finish = format('%