From dff8bd9be289f1237b36d314b49d03d4803cb56e Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Thu, 14 Mar 2024 11:59:05 +0900 Subject: [PATCH] Replace usage of uriescape The uriescape function from puppetlabs-stdlib is no longer functional in Puppet 8, because the URI.escape, which is internally used by that function, is no longer available in Ruby 3+. This replaces the function by own function to avoid the failure in Puppet 8. Closes-Bug: #2057860 Change-Id: I7b4db4c1e64416e20d8470cbff0b8497c6a0cfc9 --- .../encode_url_queries_for_python.rb | 19 +++++++++++++++++++ manifests/migration/libvirt.pp | 8 +------- 2 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 lib/puppet/functions/encode_url_queries_for_python.rb diff --git a/lib/puppet/functions/encode_url_queries_for_python.rb b/lib/puppet/functions/encode_url_queries_for_python.rb new file mode 100644 index 000000000..1a8d57244 --- /dev/null +++ b/lib/puppet/functions/encode_url_queries_for_python.rb @@ -0,0 +1,19 @@ +Puppet::Functions.create_function(:encode_url_queries_for_python) do + + def encode_url_queries_for_python(*args) + require 'uri' + + if (args.size != 1) then + raise Puppet::ParseError, 'encode_url_queries_for_python(): Wrong number of arguments' + end + queries = args[0] + if list.class != Hash + raise Puppet::ParseError, "Syntax error: #{args[0]} is not a Hash" + end + + if queries.empty? + return '' + end + return '?' + URI.encode_www_form(queries).gsub(/%/, '%%') + end +end diff --git a/manifests/migration/libvirt.pp b/manifests/migration/libvirt.pp index de107bd3d..5b6d801c4 100644 --- a/manifests/migration/libvirt.pp +++ b/manifests/migration/libvirt.pp @@ -233,13 +233,7 @@ class nova::migration::libvirt( $postfix = '' } - if empty($client_extraparams) { - $extra_params ='' - } else { - $extra_params_before_python_escape = join(uriescape(join_keys_to_values($client_extraparams, '=')), '&') - # Must escape % as nova interprets it incorrectly. - $extra_params = sprintf('?%s', regsubst($extra_params_before_python_escape, '%', '%%', 'G')) - } + extra_params = encode_url_queries_for_python($client_extraparams) $live_migration_uri = "qemu+${transport}://${prefix}%s${postfix}/system${extra_params}"