From f02e0eb19a881a634b5bf8c27c35799039cd69b4 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Mon, 21 Aug 2023 21:20:36 -0400 Subject: [PATCH 01/16] Fix getting IP by not returning a bad address --- lib/vmpooler/providers/vsphere.rb | 2 ++ spec/rbvmomi_helper.rb | 2 +- spec/unit/providers/vsphere_spec.rb | 32 ++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index 48eabd3..fe6749e 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -603,9 +603,11 @@ module Vmpooler 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 diff --git a/spec/rbvmomi_helper.rb b/spec/rbvmomi_helper.rb index ace62b6..c045a3f 100644 --- a/spec/rbvmomi_helper.rb +++ b/spec/rbvmomi_helper.rb @@ -818,7 +818,7 @@ end def mock_RbVmomi_VIM_VirtualMachine(options = {}) options[:snapshot_tree] = nil if options[:snapshot_tree].nil? options[:name] = 'VM' + rand(65536).to_s if options[:name].nil? - options[:ip] = '169.254.255.255' if options[:ip].nil? + options[:ip] = '192.168.0.2' if options[:ip].nil? options[:path] = [] if options[:path].nil? mock = MockVirtualMachine.new() diff --git a/spec/unit/providers/vsphere_spec.rb b/spec/unit/providers/vsphere_spec.rb index 0dc2092..893b545 100644 --- a/spec/unit/providers/vsphere_spec.rb +++ b/spec/unit/providers/vsphere_spec.rb @@ -580,11 +580,41 @@ EOT end end + context 'when VM exists but contains a self assigned ip' do + let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({ + :name => vmname, + :ip => '169.254.255.255', + }) + } + + it 'should return nil ip' do + allow(subject).to receive(:sleep) + result = subject.get_vm(poolname,vmname) + + expect(result['ip']).to eq(nil) + end + end + + context 'when VM exists but contains an invalid ip' do + let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({ + :name => vmname, + :ip => '0.0.0.0', + }) + } + + it 'should return nil for ip' do + allow(subject).to receive(:sleep) + result = subject.get_vm(poolname,vmname) + + expect(result['ip']).to eq(nil) + end + end + context 'when VM exists and contains all information' do let(:vm_hostname) { "#{vmname}.demo.local" } let(:boot_time) { Time.now } let(:power_state) { 'MockPowerState' } - let(:ip) { '169.254.255.255' } + let(:ip) { '192.168.0.2' } let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({ :name => vmname, From 7316431f783c2f963cb053872064895faf6664c0 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Mon, 21 Aug 2023 21:44:31 -0400 Subject: [PATCH 02/16] Increase timeout for getting an IP --- lib/vmpooler/providers/vsphere.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index fe6749e..358727f 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -599,7 +599,7 @@ 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 = 120 ip_loop_delay = 1 ip_loop_count = 1 ip = nil From f0c7d377d18bd70939bc97974ea810a191fdc852 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Tue, 22 Aug 2023 08:23:04 -0400 Subject: [PATCH 03/16] 3.3.1 release prep --- CHANGELOG.md | 8 ++++++++ Gemfile.lock | 2 +- lib/vmpooler-provider-vsphere/version.rb | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b9794b..6ceb962 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [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..6451e9e 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.1) rbvmomi2 (>= 3.1, < 4.0) vmpooler (~> 3.0) diff --git a/lib/vmpooler-provider-vsphere/version.rb b/lib/vmpooler-provider-vsphere/version.rb index e954ce9..b3bbe34 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.1' end From 978fc0031ac5998b9e071b94945daa22fd1116fd Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Wed, 23 Aug 2023 05:46:49 -0700 Subject: [PATCH 04/16] (maint) Increase timeout for cloned vms to obtain IPs. --- lib/vmpooler/providers/vsphere.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index 358727f..c5e3212 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -599,7 +599,7 @@ module Vmpooler boottime = vm_object.runtime.bootTime if vm_object.runtime&.bootTime powerstate = vm_object.runtime.powerState if vm_object.runtime&.powerState - ip_maxloop = 120 + ip_maxloop = 240 ip_loop_delay = 1 ip_loop_count = 1 ip = nil From 69629e1019a7d310d24e3e94e28387b525a65440 Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Wed, 23 Aug 2023 06:03:47 -0700 Subject: [PATCH 05/16] (maint) Release prep for version 3.3.2 --- CHANGELOG.md | 8 ++++++++ Gemfile.lock | 2 +- lib/vmpooler-provider-vsphere/version.rb | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ceb962..dcb5fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [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) diff --git a/Gemfile.lock b/Gemfile.lock index 6451e9e..44930ce 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - vmpooler-provider-vsphere (3.3.1) + vmpooler-provider-vsphere (3.3.2) rbvmomi2 (>= 3.1, < 4.0) vmpooler (~> 3.0) diff --git a/lib/vmpooler-provider-vsphere/version.rb b/lib/vmpooler-provider-vsphere/version.rb index b3bbe34..5952ba7 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.1' + VERSION = '3.3.2' end From 81f5192ded0ac5b0498a55bca039b253d127ac98 Mon Sep 17 00:00:00 2001 From: isaac-hammes Date: Mon, 28 Aug 2023 07:39:11 -0700 Subject: [PATCH 06/16] (maint) Update Gemfile.lock and use block for transaction. --- Gemfile.lock | 21 ++++++++++++--------- lib/vmpooler/providers/vsphere.rb | 30 +++++++++++++++--------------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 44930ce..220fd6d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index c5e3212..a67ca7e 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) - # 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 @@ -1137,10 +1137,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 @@ -1158,10 +1158,10 @@ module Vmpooler metrics.increment("migrate_to.#{dest_host_name}") @redis.with_metrics do |redis| checkout_to_migration = format('%