diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 81e0069..4ae585a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,3 +5,9 @@ updates: schedule: interval: weekly open-pull-requests-limit: 10 + +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly + open-pull-requests-limit: 10 diff --git a/.github/workflows/auto_release_prep.yml b/.github/workflows/auto_release_prep.yml new file mode 100644 index 0000000..50d172f --- /dev/null +++ b/.github/workflows/auto_release_prep.yml @@ -0,0 +1,12 @@ +name: Automated release prep + +on: + workflow_dispatch: + +jobs: + auto_release_prep: + uses: puppetlabs/release-engineering-repo-standards/.github/workflows/auto_release_prep.yml@v1 + secrets: inherit + with: + project-type: ruby + version-file-path: lib/vmpooler-provider-vsphere/version.rb diff --git a/.github/workflows/dependabot_merge.yml b/.github/workflows/dependabot_merge.yml new file mode 100644 index 0000000..75b9cea --- /dev/null +++ b/.github/workflows/dependabot_merge.yml @@ -0,0 +1,8 @@ +name: Dependabot auto-merge + +on: pull_request + +jobs: + dependabot_merge: + uses: puppetlabs/release-engineering-repo-standards/.github/workflows/dependabot_merge.yml@v1 + secrets: inherit diff --git a/.github/workflows/ensure_label.yml b/.github/workflows/ensure_label.yml new file mode 100644 index 0000000..50a5fa8 --- /dev/null +++ b/.github/workflows/ensure_label.yml @@ -0,0 +1,8 @@ +name: Ensure label + +on: pull_request + +jobs: + ensure_label: + uses: puppetlabs/release-engineering-repo-standards/.github/workflows/ensure_label.yml@v1 + secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5d71f9f..1ba42e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,10 +7,10 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'puppetlabs/vmpooler-provider-vsphere' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Get Current Version - uses: actions/github-script@v6 + uses: actions/github-script@v7 id: cv with: script: | diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 666c602..ba273f5 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: checkout repo content - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 1 - name: setup ruby @@ -22,7 +22,7 @@ jobs: - name: check lock run: '[ -f "Gemfile.lock" ] && echo "package lock file exists, skipping" || bundle lock' # install java - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' # See 'Supported distributions' for available options java-version: '17' diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 105fc8e..1f2f421 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -20,7 +20,7 @@ jobs: ruby-version: - 'jruby-9.4.3.0' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: @@ -36,7 +36,7 @@ jobs: ruby-version: - 'jruby-9.4.3.0' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b9794b..8e3ca6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,37 @@ # Changelog +## [3.3.4](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.4) (2023-08-30) + +[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.3...3.3.4) + +**Fixed bugs:** + +- \(maint\) Convert booleans and Time objects to strings when being added to redis [\#51](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/51) ([isaac-hammes](https://github.com/isaac-hammes)) + +## [3.3.3](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.3) (2023-08-28) + +[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.2...3.3.3) + +**Fixed bugs:** + +- \(maint\) Update Gemfile.lock and use block for transaction. [\#49](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/49) ([isaac-hammes](https://github.com/isaac-hammes)) + +## [3.3.2](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.2) (2023-08-23) + +[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.1...3.3.2) + +**Fixed bugs:** + +- \(maint\) Increase timeout for cloned vms to obtain IPs. [\#47](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/47) ([isaac-hammes](https://github.com/isaac-hammes)) + +## [3.3.1](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.1) (2023-08-22) + +[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.0...3.3.1) + +**Fixed bugs:** + +- \(RE-15710\) Fix IP address that is returned and increase timeout [\#44](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/44) ([yachub](https://github.com/yachub)) + ## [3.3.0](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.0) (2023-08-18) [Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.2.0...3.3.0) diff --git a/Gemfile.lock b/Gemfile.lock index 2d7e14b..6d96901 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - vmpooler-provider-vsphere (3.3.0) + vmpooler-provider-vsphere (3.3.4) rbvmomi2 (>= 3.1, < 4.0) vmpooler (~> 3.0) @@ -34,11 +34,11 @@ GEM net-ldap (0.18.0) nio4r (2.5.9) nio4r (2.5.9-java) - nokogiri (1.15.3-java) + nokogiri (1.15.4-java) racc (~> 1.4) - nokogiri (1.15.3-x86_64-linux) + nokogiri (1.15.4-x86_64-linux) racc (~> 1.4) - opentelemetry-api (1.2.1) + opentelemetry-api (1.2.2) opentelemetry-common (0.20.0) opentelemetry-api (~> 1.0) opentelemetry-exporter-jaeger (0.23.0) @@ -96,9 +96,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) @@ -114,7 +114,10 @@ GEM json (~> 2.3) nokogiri (~> 1.12, >= 1.12.5) optimist (~> 3.0) - redis (4.8.1) + redis (5.0.7) + redis-client (>= 0.9.0) + redis-client (0.16.0) + connection_pool regexp_parser (2.8.1) rexml (3.2.6) rspec (3.12.0) @@ -163,9 +166,9 @@ GEM thrift (0.18.1) tilt (2.2.0) unicode-display_width (2.4.2) - vmpooler (3.2.0) + vmpooler (3.5.1) concurrent-ruby (~> 1.1) - connection_pool (~> 2.2) + connection_pool (~> 2.4) deep_merge (~> 1.2) net-ldap (~> 0.16) opentelemetry-exporter-jaeger (= 0.23.0) @@ -180,7 +183,7 @@ GEM 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) diff --git a/lib/vmpooler-provider-vsphere/version.rb b/lib/vmpooler-provider-vsphere/version.rb index e954ce9..36c56a7 100644 --- a/lib/vmpooler-provider-vsphere/version.rb +++ b/lib/vmpooler-provider-vsphere/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module VmpoolerProviderVsphere - VERSION = '3.3.0' + VERSION = '3.3.4' end diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index 48eabd3..efd3c9f 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -68,14 +68,14 @@ module Vmpooler try = 0 if try.nil? max_tries = 3 @redis.with_metrics do |redis| - redis.multi - redis.srem("vmpooler__completed__#{pool}", vm_name) - redis.hdel("vmpooler__active__#{pool}", vm_name) - redis.hset("vmpooler__vm__#{vm_name}", 'destroy', Time.now) + redis.multi do |transaction| + transaction.srem("vmpooler__completed__#{pool}", vm_name) + transaction.hdel("vmpooler__active__#{pool}", vm_name) + transaction.hset("vmpooler__vm__#{vm_name}", 'destroy', Time.now.to_s) - # Auto-expire metadata key - redis.expire("vmpooler__vm__#{vm_name}", (data_ttl * 60 * 60)) - redis.exec + # Auto-expire metadata key + transaction.expire("vmpooler__vm__#{vm_name}", (data_ttl * 60 * 60)) + end end start = Time.now @@ -599,13 +599,15 @@ module Vmpooler boottime = vm_object.runtime.bootTime if vm_object.runtime&.bootTime powerstate = vm_object.runtime.powerState if vm_object.runtime&.powerState - ip_maxloop = 60 + ip_maxloop = 240 ip_loop_delay = 1 ip_loop_count = 1 ip = nil + invalid_addresses = /(0|169)\.(0|254)\.\d+\.\d+/ while ip.nil? sleep(ip_loop_delay) ip = vm_object.guest_ip + ip = nil if !ip.nil? && ip.match?(invalid_addresses) unless ip_maxloop == 0 break if ip_loop_count >= ip_maxloop @@ -1101,6 +1103,9 @@ module Vmpooler begin connection = ensured_vsphere_connection(pool_object) vm_hash = get_vm_details(pool_name, vm_name, connection) + + raise StandardError, 'failed to get vm details. vm is unreachable or no longer exists' if vm_hash.nil? + @redis.with_metrics do |redis| redis.hset("vmpooler__vm__#{vm_name}", 'host', vm_hash['host_name']) migration_count = redis.scard('vmpooler__migration') @@ -1135,10 +1140,10 @@ module Vmpooler target_host_object = find_host_by_dnsname(connection, target_host_name) finish = migrate_vm_and_record_timing(pool_name, vm_name, vm_hash, target_host_object, target_host_name) @redis.with_metrics do |redis| - redis.multi - redis.hset("vmpooler__vm__#{vm_name}", 'host', target_host_name) - redis.hset("vmpooler__vm__#{vm_name}", 'migrated', true) - redis.exec + redis.multi do |transaction| + transaction.hset("vmpooler__vm__#{vm_name}", 'host', target_host_name) + transaction.hset("vmpooler__vm__#{vm_name}", 'migrated', 'true') + end end logger.log('s', "[>] [#{pool_name}] '#{vm_name}' migrated from #{vm_hash['host_name']} to #{target_host_name} in #{finish} seconds") ensure @@ -1156,10 +1161,10 @@ module Vmpooler metrics.increment("migrate_to.#{dest_host_name}") @redis.with_metrics do |redis| checkout_to_migration = format('%