From 5ea790a068268eaec5394e100d8ebe38b0e853be Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 3 Apr 2020 15:05:04 +0200 Subject: [PATCH] Fixes #30857 - Merge puppet_proxy_puppet_api into mod In 7e7015aba068db541bd4f4cf1856bf69ebbe2953 the legacy provider was dropped. Since then, there is only one provider. The provider code was kept since it didn't need any changes to configuration files. However, having a module with just a single provider is complex. Both from a code perspective and as an admin. The implications are that the puppet.yaml and puppet_proxy_puppet_api.yaml files are merged (after being split in df0fc729bb8f3275c55f8673c669085755eee347). This means installer and manual updates are needed to reflect this. --- config/settings.d/puppet.yml.example | 11 +++ .../puppet_proxy_puppet_api.yml.example | 11 --- .../20160413000000_migrate_puppet_settings.rb | 88 ------------------- lib/smart_proxy_main.rb | 1 - .../apiv3.rb} | 10 +-- modules/puppet_proxy/configuration_loader.rb | 35 ++++++-- .../environment.rb | 0 .../errors.rb | 0 .../puppet_class.rb | 0 modules/puppet_proxy/puppet_plugin.rb | 8 +- ...vironment_classes_api_classes_retriever.rb | 6 +- .../puppet_proxy/v3_environments_retriever.rb | 22 +++++ .../environments_retriever_base.rb | 25 ------ .../plugin_configuration.rb | 35 -------- .../puppet_proxy_puppet_api.rb | 2 - .../puppet_proxy_puppet_api_plugin.rb | 15 ---- .../v3_environments_retriever.rb | 8 -- test/migrations/puppet_migration_test.rb | 77 ---------------- test/puppet/api_request_test.rb | 6 +- test/puppet/integration_test.rb | 9 +- test/puppet/puppet_api_configuration_test.rb | 33 +++---- .../puppet_api_environments_retriever_test.rb | 13 ++- test/puppet/puppet_api_test.rb | 15 ++-- ...i_v3_environment_classes_retriever_test.rb | 50 +++++------ test/puppet/puppet_class_test.rb | 2 +- 25 files changed, 133 insertions(+), 349 deletions(-) delete mode 100644 config/settings.d/puppet_proxy_puppet_api.yml.example delete mode 100644 extra/migrations/20160413000000_migrate_puppet_settings.rb rename modules/{puppet_proxy_puppet_api/v3_api_request.rb => puppet_proxy/apiv3.rb} (83%) rename modules/{puppet_proxy_common => puppet_proxy}/environment.rb (100%) rename modules/{puppet_proxy_common => puppet_proxy}/errors.rb (100%) rename modules/{puppet_proxy_common => puppet_proxy}/puppet_class.rb (100%) rename modules/{puppet_proxy_puppet_api => puppet_proxy}/v3_environment_classes_api_classes_retriever.rb (94%) create mode 100644 modules/puppet_proxy/v3_environments_retriever.rb delete mode 100644 modules/puppet_proxy_common/environments_retriever_base.rb delete mode 100644 modules/puppet_proxy_puppet_api/plugin_configuration.rb delete mode 100644 modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api.rb delete mode 100644 modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api_plugin.rb delete mode 100644 modules/puppet_proxy_puppet_api/v3_environments_retriever.rb delete mode 100644 test/migrations/puppet_migration_test.rb diff --git a/config/settings.d/puppet.yml.example b/config/settings.d/puppet.yml.example index 08e49ed3d..6735b7a50 100644 --- a/config/settings.d/puppet.yml.example +++ b/config/settings.d/puppet.yml.example @@ -1,3 +1,14 @@ --- # Can be true, false, or http/https to enable just one of the protocols :enabled: false + +# URL of the puppet master itself for API requests. +#:puppet_url: https://puppet.example.com:8140 + +# SSL certificates used to access the puppet API +#:puppet_ssl_ca: /etc/puppetlabs/puppet/ssl/certs/ca.pem +#:puppet_ssl_cert: /etc/puppetlabs/puppet/ssl/certs/puppet.example.com.pem +#:puppet_ssl_key: /etc/puppetlabs/puppet/ssl/private_keys/puppet.example.com.pem + +# Smart Proxy api timeout when Puppet's environment classes api is used and classes cache is disabled +#:api_timeout: 30 diff --git a/config/settings.d/puppet_proxy_puppet_api.yml.example b/config/settings.d/puppet_proxy_puppet_api.yml.example deleted file mode 100644 index b95b4f2f2..000000000 --- a/config/settings.d/puppet_proxy_puppet_api.yml.example +++ /dev/null @@ -1,11 +0,0 @@ ---- -# URL of the puppet master itself for API requests. -#:puppet_url: https://puppet.example.com:8140 -# -# SSL certificates used to access the puppet API -#:puppet_ssl_ca: /var/lib/puppet/ssl/certs/ca.pem -#:puppet_ssl_cert: /var/lib/puppet/ssl/certs/puppet.example.com.pem -#:puppet_ssl_key: /var/lib/puppet/ssl/private_keys/puppet.example.com.pem -# -# Smart Proxy api timeout when Puppet's environment classes api is used and classes cache is disabled -#:api_timeout: 30 diff --git a/extra/migrations/20160413000000_migrate_puppet_settings.rb b/extra/migrations/20160413000000_migrate_puppet_settings.rb deleted file mode 100644 index dd9c767bf..000000000 --- a/extra/migrations/20160413000000_migrate_puppet_settings.rb +++ /dev/null @@ -1,88 +0,0 @@ -require 'yaml' - -class MigratePuppetSettings < ::Proxy::Migration - KNOWN_PARAMETERS = { - :enabled => [:puppet, :enabled], - :puppet_provider => [:puppet, :use_provider], - :puppet_user => [:puppet_proxy_puppetrun, :puppet_proxy_mcollective, :puppet_user], - :salt_puppetrun_cmd => [:puppet_proxy_salt, :command], - :customrun_cmd => [:puppet_proxy_customrun, :command], - :customrun_args => [:puppet_proxy_customrun, :command_arguments], - :puppet_url => [:puppet_proxy_puppet_api, :puppet_url], - :puppet_ssl_ca => [:puppet_proxy_puppet_api, :puppet_ssl_ca], - :puppet_ssl_cert => [:puppet_proxy_puppet_api, :puppet_ssl_cert], - :puppet_ssl_key => [:puppet_proxy_puppet_api, :puppet_ssl_key], - :puppetssh_sudo => [:puppet_proxy_ssh, :use_sudo], - :puppetssh_command => [:puppet_proxy_ssh, :command], - :puppetssh_wait => [:puppet_proxy_ssh, :wait], - :puppetssh_user => [:puppet_proxy_ssh, :user], - :puppetssh_keyfile => [:puppet_proxy_ssh, :keyfile], - :mcollective_user => [:puppet_proxy_mcollective, :user], - } - - def migrate - puppet_config = path(src_dir, "settings.d", "puppet.yml") - unless File.exist?(puppet_config) - duplicate_original_configuration - return - end - - to_migrate = YAML.load_file(puppet_config) - - output = migrate_puppet_configuration(to_migrate) - copy_original_configuration_except(path("settings.d", "puppet.yml")) - write_to_files(output) - end - - def remap_parameter(aparameter, avalue) - module_names_to_parameter = KNOWN_PARAMETERS.has_key?(aparameter) ? KNOWN_PARAMETERS[aparameter] : [:unknown, aparameter] - parameter_name = module_names_to_parameter.last - module_names = module_names_to_parameter[0..-2] - - avalue = old_provider_name_to_new(avalue) if parameter_name == :use_provider - module_names.map { |module_name| [module_name, parameter_name, avalue] } - end - - def old_provider_name_to_new(aname) - if ['puppetrun', 'mcollective', 'puppetssh', 'salt', 'customrun'].include?(aname) - (aname == 'puppetssh') ? 'puppet_proxy_ssh' : 'puppet_proxy_' + aname - else - aname - end - end - - def migrate_puppet_configuration(to_migrate) - migrated = Hash.new { |h, k| h[k] = {} } - to_migrate.each do |option, value| - remap_parameter(option, value).each { |module_name, parameter_name, parameter_value| migrated[module_name][parameter_name] = parameter_value } - end - - # deal with puppet_user setting, which used to be global, but has been moved (and renamed) to puppetrun and mcollective modules - if migrated.has_key?(:puppet_proxy_puppetrun) - puppetrun_user = migrated[:puppet_proxy_puppetrun].delete(:puppet_user) - migrated[:puppet_proxy_puppetrun][:user] = puppetrun_user unless puppetrun_user.nil? - end - - if migrated.has_key?(:puppet_proxy_mcollective) - puppet_user = migrated[:puppet_proxy_mcollective].delete(:puppet_user) - unless (migrated[:puppet_proxy_mcollective].has_key?(:user) || puppet_user.nil?) - migrated[:puppet_proxy_mcollective][:user] = puppet_user - end - end - - migrated - end - - def write_to_files(output) - output.keys.each do |m| - next if output[m].empty? || m == :unknown - File.open(path(dst_dir, "settings.d", "#{m}.yml"), 'w') do |f| - f.write(strip_ruby_symbol_encoding(output[m].to_yaml)) - if (m == :puppet) && !output[:unknown].empty? - f.write "\n# Unparsed options, please review\n" - f.write(strip_ruby_symbol_encoding(output[:unknown].to_yaml).gsub(/^---/, '')) - end - end - end - end -end diff --git a/lib/smart_proxy_main.rb b/lib/smart_proxy_main.rb index 6428cda65..4258caf0d 100644 --- a/lib/smart_proxy_main.rb +++ b/lib/smart_proxy_main.rb @@ -67,7 +67,6 @@ module Proxy require 'puppetca_hostname_whitelisting/puppetca_hostname_whitelisting' require 'puppetca_token_whitelisting/puppetca_token_whitelisting' require 'puppet_proxy/puppet' - require 'puppet_proxy_puppet_api/puppet_proxy_puppet_api' require 'bmc/bmc' require 'realm/realm' require 'realm_freeipa/realm_freeipa' diff --git a/modules/puppet_proxy_puppet_api/v3_api_request.rb b/modules/puppet_proxy/apiv3.rb similarity index 83% rename from modules/puppet_proxy_puppet_api/v3_api_request.rb rename to modules/puppet_proxy/apiv3.rb index 5336f3a01..894fde8c0 100644 --- a/modules/puppet_proxy_puppet_api/v3_api_request.rb +++ b/modules/puppet_proxy/apiv3.rb @@ -1,14 +1,12 @@ require 'puppet_proxy_common/api_request' -module Proxy::PuppetApi - class EnvironmentsApiv3 < ::Proxy::Puppet::ApiRequest +module Proxy::Puppet + class Apiv3 < ::Proxy::Puppet::ApiRequest + NOT_MODIFIED = Object.new + def find_environments handle_response(send_request('puppet/v3/environments'), "Failed to query Puppet find environments v3 API") end - end - - class EnvironmentClassesApiv3 < ::Proxy::Puppet::ApiRequest - NOT_MODIFIED = Object.new def list_classes(environment, etag, timeout) response = send_request("puppet/v3/environment_classes?environment=#{environment}", timeout, "If-None-Match" => etag) diff --git a/modules/puppet_proxy/configuration_loader.rb b/modules/puppet_proxy/configuration_loader.rb index 925255cac..42e5f0c72 100644 --- a/modules/puppet_proxy/configuration_loader.rb +++ b/modules/puppet_proxy/configuration_loader.rb @@ -1,14 +1,37 @@ module ::Proxy::Puppet class ConfigurationLoader - def load_programmable_settings(settings) - settings[:use_provider] = [:puppet_proxy_puppet_api] - settings - end - def load_classes - require 'puppet_proxy_common/errors' + require 'puppet_proxy/errors' require 'puppet_proxy/dependency_injection' require 'puppet_proxy/puppet_api' + require 'puppet_proxy/environment' + require 'puppet_proxy/puppet_class' + require 'puppet_proxy_common/api_request' + require 'puppet_proxy/apiv3' + require 'puppet_proxy/v3_environments_retriever' + require 'puppet_proxy/v3_environment_classes_api_classes_retriever' + end + + def load_dependency_injection_wirings(container_instance, settings) + container_instance.dependency :environment_retriever_impl, + (lambda do + api = Proxy::Puppet::Apiv3.new( + settings[:puppet_url], + settings[:puppet_ssl_ca], + settings[:puppet_ssl_cert], + settings[:puppet_ssl_key]) + ::Proxy::Puppet::V3EnvironmentsRetriever.new(api) + end) + + container_instance.singleton_dependency :class_retriever_impl, + (lambda do + ::Proxy::Puppet::V3EnvironmentClassesApiClassesRetriever.new( + settings[:puppet_url], + settings[:puppet_ssl_ca], + settings[:puppet_ssl_cert], + settings[:puppet_ssl_key], + settings[:api_timeout]) + end) end end end diff --git a/modules/puppet_proxy_common/environment.rb b/modules/puppet_proxy/environment.rb similarity index 100% rename from modules/puppet_proxy_common/environment.rb rename to modules/puppet_proxy/environment.rb diff --git a/modules/puppet_proxy_common/errors.rb b/modules/puppet_proxy/errors.rb similarity index 100% rename from modules/puppet_proxy_common/errors.rb rename to modules/puppet_proxy/errors.rb diff --git a/modules/puppet_proxy_common/puppet_class.rb b/modules/puppet_proxy/puppet_class.rb similarity index 100% rename from modules/puppet_proxy_common/puppet_class.rb rename to modules/puppet_proxy/puppet_class.rb diff --git a/modules/puppet_proxy/puppet_plugin.rb b/modules/puppet_proxy/puppet_plugin.rb index eb15a698b..b0b57b252 100644 --- a/modules/puppet_proxy/puppet_plugin.rb +++ b/modules/puppet_proxy/puppet_plugin.rb @@ -4,8 +4,12 @@ class Plugin < Proxy::Plugin plugin :puppet, ::Proxy::VERSION - uses_provider - load_programmable_settings ::Proxy::Puppet::ConfigurationLoader load_classes ::Proxy::Puppet::ConfigurationLoader + load_dependency_injection_wirings ::Proxy::Puppet::ConfigurationLoader + + default_settings :puppet_ssl_ca => '/etc/puppetlabs/puppet/ssl/certs/ca.pem', :api_timeout => 30 + validate :puppet_url, :url => true + expose_setting :puppet_url + validate_readable :puppet_ssl_ca, :puppet_ssl_cert, :puppet_ssl_key end end diff --git a/modules/puppet_proxy_puppet_api/v3_environment_classes_api_classes_retriever.rb b/modules/puppet_proxy/v3_environment_classes_api_classes_retriever.rb similarity index 94% rename from modules/puppet_proxy_puppet_api/v3_environment_classes_api_classes_retriever.rb rename to modules/puppet_proxy/v3_environment_classes_api_classes_retriever.rb index a0f47d230..2c467d083 100644 --- a/modules/puppet_proxy_puppet_api/v3_environment_classes_api_classes_retriever.rb +++ b/modules/puppet_proxy/v3_environment_classes_api_classes_retriever.rb @@ -1,6 +1,6 @@ require 'concurrent' -class Proxy::PuppetApi::V3EnvironmentClassesApiClassesRetriever +class Proxy::Puppet::V3EnvironmentClassesApiClassesRetriever include ::Proxy::Log DEFAULT_CLIENT_TIMEOUT = 15 @@ -18,7 +18,7 @@ def initialize(puppet_url, puppet_ssl_ca, puppet_ssl_cert, puppet_ssl_key, api_t @puppet_url = puppet_url @api_timeout = api_timeout @m = Monitor.new - @puppet_api = api || Proxy::PuppetApi::EnvironmentClassesApiv3 + @puppet_api = api || Proxy::Puppet::Apiv3 end def classes_in_environment(environment) @@ -84,7 +84,7 @@ def async_get_classes(environment) raise e end - if response == Proxy::PuppetApi::EnvironmentClassesApiv3::NOT_MODIFIED + if response == Proxy::Puppet::Apiv3::NOT_MODIFIED @m.synchronize do @futures_cache.delete(environment) logger.debug { "Puppet cache counts: classes %d, etag %d, futures %d" % [@classes_cache.size, @etag_cache.size, @futures_cache.size] } diff --git a/modules/puppet_proxy/v3_environments_retriever.rb b/modules/puppet_proxy/v3_environments_retriever.rb new file mode 100644 index 000000000..856d8e7c0 --- /dev/null +++ b/modules/puppet_proxy/v3_environments_retriever.rb @@ -0,0 +1,22 @@ +module Proxy::Puppet + class V3EnvironmentsRetriever + def initialize(api) + @api = api + end + + def get(an_environment) + found = all.find { |e| e.name == an_environment } + raise Proxy::Puppet::EnvironmentNotFound.new("Could not find environment '#{an_environment}'") unless found + found + end + + def all + response = @api.find_environments + raise Proxy::Puppet::DataError.new("No environments list in Puppet API response") unless response['environments'] + environments = response['environments'].each_with_object({}) do |item, envs| + envs[item.first] = item.last['settings']['modulepath'] if item.last && item.last['settings'] && item.last['settings']['modulepath'] + end + environments.map { |env, path| Proxy::Puppet::Environment.new(env, path) } + end + end +end diff --git a/modules/puppet_proxy_common/environments_retriever_base.rb b/modules/puppet_proxy_common/environments_retriever_base.rb deleted file mode 100644 index 667535b4f..000000000 --- a/modules/puppet_proxy_common/environments_retriever_base.rb +++ /dev/null @@ -1,25 +0,0 @@ -class Proxy::Puppet::EnvironmentsRetrieverBase - attr_reader :puppet_url, :ssl_ca, :ssl_cert, :ssl_key - - def initialize(puppet_url, puppet_ssl_ca, puppet_ssl_cert, puppet_ssl_key) - @puppet_url = puppet_url - @ssl_ca = puppet_ssl_ca - @ssl_cert = puppet_ssl_cert - @ssl_key = puppet_ssl_key - end - - def get(an_environment) - found = all.find { |e| e.name == an_environment } - raise Proxy::Puppet::EnvironmentNotFound.new("Could not find environment '#{an_environment}'") unless found - found - end - - def all - response = @api.find_environments - raise Proxy::Puppet::DataError.new("No environments list in Puppet API response") unless response['environments'] - environments = response['environments'].each_with_object({}) do |item, envs| - envs[item.first] = item.last['settings']['modulepath'] if item.last && item.last['settings'] && item.last['settings']['modulepath'] - end - environments.map { |env, path| Proxy::Puppet::Environment.new(env, path) } - end -end diff --git a/modules/puppet_proxy_puppet_api/plugin_configuration.rb b/modules/puppet_proxy_puppet_api/plugin_configuration.rb deleted file mode 100644 index 9f6e6eb54..000000000 --- a/modules/puppet_proxy_puppet_api/plugin_configuration.rb +++ /dev/null @@ -1,35 +0,0 @@ -module ::Proxy::PuppetApi - class PluginConfiguration - def load_programmable_settings(settings) - settings[:classes_retriever] = :apiv3 - settings[:environments_retriever] = :apiv3 - settings - end - - def load_classes - require 'puppet_proxy_common/errors' - require 'puppet_proxy_common/environments_retriever_base' - require 'puppet_proxy_common/environment' - require 'puppet_proxy_common/puppet_class' - require 'puppet_proxy_common/api_request' - require 'puppet_proxy_puppet_api/v3_api_request' - require 'puppet_proxy_puppet_api/v3_environments_retriever' - require 'puppet_proxy_puppet_api/v3_environment_classes_api_classes_retriever' - end - - def load_dependency_injection_wirings(container_instance, settings) - container_instance.dependency :environment_retriever_impl, - -> { ::Proxy::PuppetApi::V3EnvironmentsRetriever.new(settings[:puppet_url], settings[:puppet_ssl_ca], settings[:puppet_ssl_cert], settings[:puppet_ssl_key]) } - - container_instance.singleton_dependency :class_retriever_impl, - (lambda do - ::Proxy::PuppetApi::V3EnvironmentClassesApiClassesRetriever.new( - settings[:puppet_url], - settings[:puppet_ssl_ca], - settings[:puppet_ssl_cert], - settings[:puppet_ssl_key], - settings[:api_timeout]) - end) - end - end -end diff --git a/modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api.rb b/modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api.rb deleted file mode 100644 index c7ac0f4c0..000000000 --- a/modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'puppet_proxy_puppet_api/plugin_configuration' -require 'puppet_proxy_puppet_api/puppet_proxy_puppet_api_plugin' diff --git a/modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api_plugin.rb b/modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api_plugin.rb deleted file mode 100644 index dabc93784..000000000 --- a/modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api_plugin.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Proxy::PuppetApi - class Plugin < Proxy::Provider - default_settings :puppet_ssl_ca => '/var/lib/puppet/ssl/certs/ca.pem', :api_timeout => 30 - - plugin :puppet_proxy_puppet_api, ::Proxy::VERSION - - load_programmable_settings ::Proxy::PuppetApi::PluginConfiguration - load_classes ::Proxy::PuppetApi::PluginConfiguration - load_dependency_injection_wirings ::Proxy::PuppetApi::PluginConfiguration - - validate :puppet_url, :url => true - expose_setting :puppet_url - validate_readable :puppet_ssl_ca, :puppet_ssl_cert, :puppet_ssl_key - end -end diff --git a/modules/puppet_proxy_puppet_api/v3_environments_retriever.rb b/modules/puppet_proxy_puppet_api/v3_environments_retriever.rb deleted file mode 100644 index 610a08d0d..000000000 --- a/modules/puppet_proxy_puppet_api/v3_environments_retriever.rb +++ /dev/null @@ -1,8 +0,0 @@ -module Proxy::PuppetApi - class V3EnvironmentsRetriever < Proxy::Puppet::EnvironmentsRetrieverBase - def initialize(puppet_url, puppet_ssl_ca, puppet_ssl_cert, puppet_ssl_key, api = nil) - super(puppet_url, puppet_ssl_ca, puppet_ssl_cert, puppet_ssl_key) - @api = api || Proxy::PuppetApi::EnvironmentsApiv3.new(puppet_url, ssl_ca, ssl_cert, ssl_key) - end - end -end diff --git a/test/migrations/puppet_migration_test.rb b/test/migrations/puppet_migration_test.rb deleted file mode 100644 index bb6f9be8d..000000000 --- a/test/migrations/puppet_migration_test.rb +++ /dev/null @@ -1,77 +0,0 @@ -require 'test_helper' - -require File.join(__dir__, '../../extra/migrate_settings') -::Proxy::Migration.inject_migrations_instance(::Proxy::Migrations.new("dummy")) -require File.join(__dir__, '../../extra/migrations/20160413000000_migrate_puppet_settings.rb') - -class ProxyPuppetMigrationTest < Test::Unit::TestCase - def setup - @migration = MigratePuppetSettings.new("/tmp") - end - - def test_old_to_new_provider_name_conversion - assert_equal 'puppet_proxy_puppetrun', @migration.old_provider_name_to_new('puppetrun') - assert_equal 'puppet_proxy_mcollective', @migration.old_provider_name_to_new('mcollective') - assert_equal 'puppet_proxy_salt', @migration.old_provider_name_to_new('salt') - assert_equal 'puppet_proxy_customrun', @migration.old_provider_name_to_new('customrun') - assert_equal 'puppet_proxy_ssh', @migration.old_provider_name_to_new('puppetssh') - assert_equal 'unknown', @migration.old_provider_name_to_new('unknown') - end - - def test_puppet_parameter_remapping - assert_equal [:puppet, :enabled, true], @migration.remap_parameter(:enabled, true).flatten - assert_equal [:puppet, :use_provider, 'puppet_proxy_salt'], @migration.remap_parameter(:puppet_provider, 'salt').flatten - end - - def test_puppet_api_parameter_mapping - assert_equal [:puppet_proxy_puppet_api, :puppet_url, 'http://localhost'], @migration.remap_parameter(:puppet_url, "http://localhost").last - assert_equal [:puppet_proxy_puppet_api, :puppet_ssl_ca, 'some/path'], @migration.remap_parameter(:puppet_ssl_ca, "some/path").last - assert_equal [:puppet_proxy_puppet_api, :puppet_ssl_cert, 'some/path'], @migration.remap_parameter(:puppet_ssl_cert, "some/path").last - assert_equal [:puppet_proxy_puppet_api, :puppet_ssl_key, 'some/path'], @migration.remap_parameter(:puppet_ssl_key, "some/path").last - end - - def test_puppet_ssh_parameter_mapping - assert_equal [:puppet_proxy_ssh, :use_sudo, true], @migration.remap_parameter(:puppetssh_sudo, true).flatten - assert_equal [:puppet_proxy_ssh, :command, "command"], @migration.remap_parameter(:puppetssh_command, "command").flatten - assert_equal [:puppet_proxy_ssh, :wait, true], @migration.remap_parameter(:puppetssh_wait, true).flatten - assert_equal [:puppet_proxy_ssh, :user, "user"], @migration.remap_parameter(:puppetssh_user, "user").flatten - assert_equal [:puppet_proxy_ssh, :keyfile, "keyfile"], @migration.remap_parameter(:puppetssh_keyfile, "keyfile").flatten - end - - def test_puppet_mcollective_parameter_mapping - assert_equal [:puppet_proxy_mcollective, :puppet_user, "user"], @migration.remap_parameter(:puppet_user, "user").last - assert_equal [:puppet_proxy_mcollective, :user, "user"], @migration.remap_parameter(:mcollective_user, "user").first - end - - def test_puppetrun_parameter_mapping - assert_equal [:puppet_proxy_puppetrun, :puppet_user, "user"], @migration.remap_parameter(:puppet_user, "user").first - end - - def test_puppet_salt_parameter_mapping - assert_equal [:puppet_proxy_salt, :command, "command"], @migration.remap_parameter(:salt_puppetrun_cmd, "command").first - end - - def test_puppet_customrun_parameter_mapping - assert_equal [:puppet_proxy_customrun, :command, "command"], @migration.remap_parameter(:customrun_cmd, "command").first - assert_equal [:puppet_proxy_customrun, :command_arguments, "arg1 arg2"], @migration.remap_parameter(:customrun_args, "arg1 arg2").first - end - - def test_remapping_of_unknown_parameter - assert_equal [:unknown, :a_parameter, 'avalue'], @migration.remap_parameter(:a_parameter, 'avalue').first - end - - def test_migrate_puppet_user_for_puppetrun - assert_equal "a_user", @migration.migrate_puppet_configuration(:puppet_user => "a_user")[:puppet_proxy_puppetrun][:user] - assert_nil @migration.migrate_puppet_configuration(:puppet_user => "a_user")[:puppet_proxy_puppetrun][:puppet_user] - end - - def test_migrate_puppet_user_for_mcollective - assert_equal "a_user", @migration.migrate_puppet_configuration(:puppet_user => "a_user")[:puppet_proxy_mcollective][:user] - assert_nil @migration.migrate_puppet_configuration(:puppet_user => "a_user")[:puppet_proxy_mcollective][:puppet_user] - end - - def test_migrate_puppet_configuration - assert_equal({:puppet => {:enabled => true}, :puppet_proxy_puppet_api => {:puppet_url => "http://localhost"}}, - @migration.migrate_puppet_configuration(:enabled => true, :puppet_url => "http://localhost")) - end -end diff --git a/test/puppet/api_request_test.rb b/test/puppet/api_request_test.rb index 4e7ec1740..e09c3e13e 100644 --- a/test/puppet/api_request_test.rb +++ b/test/puppet/api_request_test.rb @@ -1,12 +1,12 @@ require 'test_helper' require 'puppet_proxy_common/api_request' -require 'puppet_proxy_puppet_api/v3_api_request' +require 'puppet_proxy/apiv3' require 'webmock/test_unit' -class PuppetApiRequestTest < Test::Unit::TestCase +class PuppetRequestTest < Test::Unit::TestCase def test_get_environments_apiv3 stub_request(:get, 'http://localhost:8140/puppet/v3/environments').to_return(:body => '{"environments":{}}') - result = Proxy::PuppetApi::EnvironmentsApiv3.new('http://localhost:8140', nil, nil, nil).find_environments + result = Proxy::Puppet::Apiv3.new('http://localhost:8140', nil, nil, nil).find_environments assert_equal({"environments" => {}}, result) end end diff --git a/test/puppet/integration_test.rb b/test/puppet/integration_test.rb index 6ff877f37..f5a9f71e8 100644 --- a/test/puppet/integration_test.rb +++ b/test/puppet/integration_test.rb @@ -2,9 +2,8 @@ require 'json' require 'root/root_v2_api' require 'puppet_proxy/puppet' -require 'puppet_proxy_puppet_api/puppet_proxy_puppet_api' -class PuppetApiFeaturesTest < Test::Unit::TestCase +class PuppetFeaturesTest < Test::Unit::TestCase include Rack::Test::Methods def app @@ -18,8 +17,8 @@ def test_features ssl_key = Tempfile.new('ssl_key') begin - Proxy::DefaultModuleLoader.any_instance.expects(:load_configuration_file).with('puppet.yml').returns(enabled: true, puppet_version: '5.5.8') - Proxy::DefaultModuleLoader.any_instance.expects(:load_configuration_file).with('puppet_proxy_puppet_api.yml').returns( + Proxy::DefaultModuleLoader.any_instance.expects(:load_configuration_file).with('puppet.yml').returns( + enabled: true, puppet_url: 'https://puppet.example.com:8140', puppet_ssl_ca: ssl_ca.path, puppet_ssl_cert: ssl_cert.path, @@ -35,7 +34,7 @@ def test_features assert_equal('running', mod['state'], Proxy::LogBuffer::Buffer.instance.info[:failed_modules][:puppet]) assert_equal([], mod['capabilities']) - expected_settings = {'use_provider' => ['puppet_proxy_puppet_api'], 'puppet_url' => 'https://puppet.example.com:8140'} + expected_settings = {'puppet_url' => 'https://puppet.example.com:8140'} assert_equal(expected_settings, mod['settings']) ensure ssl_ca.unlink diff --git a/test/puppet/puppet_api_configuration_test.rb b/test/puppet/puppet_api_configuration_test.rb index 3126bec92..19f0a6a4b 100644 --- a/test/puppet/puppet_api_configuration_test.rb +++ b/test/puppet/puppet_api_configuration_test.rb @@ -1,9 +1,9 @@ require 'test_helper' -require 'puppet_proxy_puppet_api/puppet_proxy_puppet_api' +require 'puppet_proxy/puppet' -class PuppetApiConfigurationTest < Test::Unit::TestCase +class PuppetConfigurationTest < Test::Unit::TestCase def setup - @configuration = ::Proxy::PuppetApi::PluginConfiguration.new + @configuration = ::Proxy::Puppet::ConfigurationLoader.new end def test_load_programmable_settings_sets_classes_retriever @@ -15,22 +15,21 @@ def test_load_programmable_settings_sets_environments_retriever end end -class PuppetApiDefaultSettingsTest < Test::Unit::TestCase +class PuppetDefaultSettingsTest < Test::Unit::TestCase def test_default_settings - Proxy::PuppetApi::Plugin.load_test_settings({}) - assert_equal '/var/lib/puppet/ssl/certs/ca.pem', Proxy::PuppetApi::Plugin.settings.puppet_ssl_ca - assert_equal 30, Proxy::PuppetApi::Plugin.settings.api_timeout + Proxy::Puppet::Plugin.load_test_settings({}) + assert_equal '/etc/puppetlabs/puppet/ssl/certs/ca.pem', Proxy::Puppet::Plugin.settings.puppet_ssl_ca + assert_equal 30, Proxy::Puppet::Plugin.settings.api_timeout end end -require 'puppet_proxy_common/environments_retriever_base' -require 'puppet_proxy_puppet_api/v3_api_request' -require 'puppet_proxy_puppet_api/v3_environments_retriever' -require 'puppet_proxy_puppet_api/v3_environment_classes_api_classes_retriever' +require 'puppet_proxy/apiv3' +require 'puppet_proxy/v3_environments_retriever' +require 'puppet_proxy/v3_environment_classes_api_classes_retriever' -class PuppetApiDIWiringsTest < Test::Unit::TestCase +class PuppetDIWiringsTest < Test::Unit::TestCase def setup - @configuration = ::Proxy::PuppetApi::PluginConfiguration.new + @configuration = ::Proxy::Puppet::ConfigurationLoader.new @container = ::Proxy::DependencyInjection::Container.new end @@ -41,11 +40,7 @@ def test_apiv3_environments_retriever_wiring_parameters :puppet_ssl_cert => "path_to_ssl_cert", :puppet_ssl_key => "path_to_ssl_key") - assert @container.get_dependency(:environment_retriever_impl).instance_of?(::Proxy::PuppetApi::V3EnvironmentsRetriever) - assert_equal "http://puppet.url", @container.get_dependency(:environment_retriever_impl).puppet_url - assert_equal "path_to_ca_cert", @container.get_dependency(:environment_retriever_impl).ssl_ca - assert_equal "path_to_ssl_cert", @container.get_dependency(:environment_retriever_impl).ssl_cert - assert_equal "path_to_ssl_key", @container.get_dependency(:environment_retriever_impl).ssl_key + assert @container.get_dependency(:environment_retriever_impl).instance_of?(::Proxy::Puppet::V3EnvironmentsRetriever) end def test_environment_classes_retriever_wiring_parameters @@ -56,7 +51,7 @@ def test_environment_classes_retriever_wiring_parameters :puppet_ssl_key => "path_to_ssl_key", :api_timeout => 100) - assert @container.get_dependency(:class_retriever_impl).instance_of?(::Proxy::PuppetApi::V3EnvironmentClassesApiClassesRetriever) + assert @container.get_dependency(:class_retriever_impl).instance_of?(::Proxy::Puppet::V3EnvironmentClassesApiClassesRetriever) assert_equal "http://puppet.url", @container.get_dependency(:class_retriever_impl).puppet_url assert_equal "path_to_ca_cert", @container.get_dependency(:class_retriever_impl).ssl_ca assert_equal "path_to_ssl_cert", @container.get_dependency(:class_retriever_impl).ssl_cert diff --git a/test/puppet/puppet_api_environments_retriever_test.rb b/test/puppet/puppet_api_environments_retriever_test.rb index 656a6e581..27301215a 100644 --- a/test/puppet/puppet_api_environments_retriever_test.rb +++ b/test/puppet/puppet_api_environments_retriever_test.rb @@ -1,10 +1,9 @@ require 'test_helper' -require 'puppet_proxy_common/environment' -require 'puppet_proxy_common/environments_retriever_base' -require 'puppet_proxy_common/errors' -require 'puppet_proxy_puppet_api/v3_environments_retriever' +require 'puppet_proxy/environment' +require 'puppet_proxy/errors' +require 'puppet_proxy/v3_environments_retriever' -class PuppetApiV3EnvironmentsRetrieverTest < Test::Unit::TestCase +class PuppetV3EnvironmentsRetrieverTest < Test::Unit::TestCase class EnvironmentApiForTesting attr_accessor :find_environments_response def find_environments @@ -13,8 +12,8 @@ def find_environments end def setup - @api = PuppetApiV3EnvironmentsRetrieverTest::EnvironmentApiForTesting.new - @retriever = Proxy::PuppetApi::V3EnvironmentsRetriever.new(nil, nil, nil, nil, @api) + @api = PuppetV3EnvironmentsRetrieverTest::EnvironmentApiForTesting.new + @retriever = Proxy::Puppet::V3EnvironmentsRetriever.new(@api) end def test_api_response_parsing diff --git a/test/puppet/puppet_api_test.rb b/test/puppet/puppet_api_test.rb index 7c2c0804b..f5a3f5252 100644 --- a/test/puppet/puppet_api_test.rb +++ b/test/puppet/puppet_api_test.rb @@ -1,11 +1,10 @@ require 'test_helper' require 'json' -require 'puppet_proxy_common/puppet_class' -require 'puppet_proxy_common/environment' -require 'puppet_proxy_common/environments_retriever_base' -require 'puppet_proxy_common/errors' +require 'puppet_proxy/puppet_class' +require 'puppet_proxy/environment' +require 'puppet_proxy/errors' -class ApiTestEnvironmentsRetriever < ::Proxy::Puppet::EnvironmentsRetrieverBase +class ApiTestEnvironmentsRetriever < ::Proxy::Puppet::V3EnvironmentsRetriever attr_reader :first, :second def initialize @@ -16,10 +15,6 @@ def initialize def all [@first, @second] end - - def get(an_environment) - super(an_environment) - end end class ApiTestClassesRetriever @@ -73,7 +68,7 @@ def container_instance ENV['RACK_ENV'] = 'test' -class PuppetApiTest < Test::Unit::TestCase +class PuppetTest < Test::Unit::TestCase include Rack::Test::Methods def setup diff --git a/test/puppet/puppet_api_v3_environment_classes_retriever_test.rb b/test/puppet/puppet_api_v3_environment_classes_retriever_test.rb index b2f61b70b..bf72578ef 100644 --- a/test/puppet/puppet_api_v3_environment_classes_retriever_test.rb +++ b/test/puppet/puppet_api_v3_environment_classes_retriever_test.rb @@ -1,17 +1,17 @@ require 'test_helper' require 'puppet_proxy_common/api_request' -require 'puppet_proxy_puppet_api/v3_api_request' -require 'puppet_proxy_common/errors' -require 'puppet_proxy_common/puppet_class' +require 'puppet_proxy/errors' +require 'puppet_proxy/apiv3' +require 'puppet_proxy/puppet_class' -module PuppetApiv3EnvironmentClassesApiRetrieverTests +module Puppetv3EnvironmentClassesApiRetrieverTests def setup - @api = Proxy::PuppetApi::EnvironmentClassesApiv3 - @retriever = Proxy::PuppetApi::V3EnvironmentClassesApiClassesRetriever.new(nil, nil, nil, nil, nil, @api) + @api = Proxy::Puppet::Apiv3 + @retriever = Proxy::Puppet::V3EnvironmentClassesApiClassesRetriever.new(nil, nil, nil, nil, nil, @api) end def test_uses_puppet_environment_classes_api - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes). + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes). with('test_environment', nil, EnvironmentClassesApiRetrieverForTesting::MAX_PUPPETAPI_TIMEOUT). returns('files' => []) EnvironmentClassesApiRetrieverForTesting.new(nil, nil, nil, nil, nil).get_classes('test_environment') @@ -19,7 +19,7 @@ def test_uses_puppet_environment_classes_api def test_passes_cached_etag_value_to_puppetapi etag_value = 42 - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes). + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes). with('test_environment', etag_value, EnvironmentClassesApiRetrieverForTesting::MAX_PUPPETAPI_TIMEOUT). returns([{'files' => []}, etag_value + 1]) retriever = EnvironmentClassesApiRetrieverForTesting.new(nil, nil, nil, nil, nil) @@ -28,7 +28,7 @@ def test_passes_cached_etag_value_to_puppetapi end def test_returns_cached_classes_if_puppet_responds_with_not_modified - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([Proxy::PuppetApi::EnvironmentClassesApiv3::NOT_MODIFIED, 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([Proxy::Puppet::Apiv3::NOT_MODIFIED, 42]) expected_classes = <<~EOL { "files": [ @@ -52,21 +52,21 @@ def test_reuses_future_for_concurrent_environment_classes_retrievals end def test_clears_futures_cache - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([{'files' => []}, 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([{'files' => []}, 42]) retriever = EnvironmentClassesApiRetrieverForTesting.new(nil, nil, nil, nil, nil) retriever.get_classes('test_environment') assert_nil retriever.futures_cache['test_environment'] end def test_clears_futures_cache_if_puppet_responds_with_not_modified - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([Proxy::PuppetApi::EnvironmentClassesApiv3::NOT_MODIFIED, 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([Proxy::Puppet::Apiv3::NOT_MODIFIED, 42]) retriever = EnvironmentClassesApiRetrieverForTesting.new(nil, nil, nil, nil, nil) retriever.get_classes('test_environment') assert_nil retriever.futures_cache['test_environment'] end def test_clears_futures_cache_if_call_to_puppet_raises_an_exception - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).raises(StandardError) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).raises(StandardError) retriever = EnvironmentClassesApiRetrieverForTesting.new(nil, nil, nil, nil, nil) assert retriever.async_get_classes('test_environment').wait(1).rejected? assert_nil retriever.futures_cache['test_environment'] @@ -83,9 +83,9 @@ def test_raises_timeouterror_if_puppet_takes_too_long_to_respond end end -module PuppetApiv3EnvironmentClassesApiParsingTests +module Puppetv3EnvironmentClassesApiParsingTests def setup - @retriever = Proxy::PuppetApi::V3EnvironmentClassesApiClassesRetriever.new(nil, nil, nil, nil, nil) + @retriever = Proxy::Puppet::V3EnvironmentClassesApiClassesRetriever.new(nil, nil, nil, nil, nil) end ENVIRONMENT_CLASSES_RESPONSE = <<~EOL @@ -108,7 +108,7 @@ def setup EOL def test_legacy_parser_with_environment_classes_response expected_classes = [Proxy::Puppet::PuppetClass.new("dns::config", {}), Proxy::Puppet::PuppetClass.new("dns::install", {})] - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE), 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE), 42]) assert_equal expected_classes, @retriever.classes_in_environment('test_environment') end @@ -118,7 +118,7 @@ def test_parser_with_environment_classes_response { "classes" => [{"name" => "dns::install", "params" => []}], "path" => "/manifests/install.pp"}, {"error" => "Syntax error at '=>' at /manifests/witherror.pp:20:19", "path" => "/manifests/witherror.pp"}, ] - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE), 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE), 42]) assert_equal expected_reponse, @retriever.classes_and_errors_in_environment('test_environment') end @@ -136,7 +136,7 @@ def test_parser_with_environment_classes_response EOL def test_legacy_parser_with_environment_classes_response_with_variable_expression_parameteres expected_classes = [Proxy::Puppet::PuppetClass.new("dns", 'namedconf_path' => '${::dns::params::namedconf_path}', 'dnsdir' => '${::dns::params::dnsdir}')] - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_EXPRESSION_PARAMETERS), 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_EXPRESSION_PARAMETERS), 42]) assert_equal expected_classes, @retriever.classes_in_environment('test_environment') end @@ -151,7 +151,7 @@ def test_parser_with_environment_classes_response_with_variable_expression_param }], "path" => "/manifests/init.pp", }] - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_EXPRESSION_PARAMETERS), 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_EXPRESSION_PARAMETERS), 42]) assert_equal expected_response, @retriever.classes_and_errors_in_environment('test_environment') end @@ -177,7 +177,7 @@ def test_parser_with_environment_classes_response_with_variable_expression_param EOL def test_legacy_parser_with_puppet_environment_classes_response_with_default_literals expected_classes = [Proxy::Puppet::PuppetClass.new("testing", 'string_with_literal_default' => 'literal default', 'a_hash' => {'one' => 'foo', 'two' => 'hello'})] - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_DEFAULT_LITERALS), 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_DEFAULT_LITERALS), 42]) assert_equal expected_classes, @retriever.classes_in_environment('test_environment') end @@ -196,17 +196,17 @@ def test_parser_with_puppet_environment_classes_response_with_default_literals "path" => "init.pp", }] - Proxy::PuppetApi::EnvironmentClassesApiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_DEFAULT_LITERALS), 42]) + Proxy::Puppet::Apiv3.any_instance.expects(:list_classes).returns([JSON.load(ENVIRONMENT_CLASSES_RESPONSE_WITH_DEFAULT_LITERALS), 42]) assert_equal expected_response, @retriever.classes_and_errors_in_environment('test_environment') end end -require 'puppet_proxy_puppet_api/v3_environment_classes_api_classes_retriever' -class EnvironmentClassesApiRetrieverForTesting < Proxy::PuppetApi::V3EnvironmentClassesApiClassesRetriever +require 'puppet_proxy/v3_environment_classes_api_classes_retriever' +class EnvironmentClassesApiRetrieverForTesting < Proxy::Puppet::V3EnvironmentClassesApiClassesRetriever attr_accessor :etag_cache, :classes_cache, :futures_cache end -class PuppetApiv3EnvironmentClassesApiRetrieverTest < Test::Unit::TestCase - include PuppetApiv3EnvironmentClassesApiRetrieverTests - include PuppetApiv3EnvironmentClassesApiParsingTests +class Puppetv3EnvironmentClassesApiRetrieverTest < Test::Unit::TestCase + include Puppetv3EnvironmentClassesApiRetrieverTests + include Puppetv3EnvironmentClassesApiParsingTests end diff --git a/test/puppet/puppet_class_test.rb b/test/puppet/puppet_class_test.rb index cfbe9c6a4..ffccf1d36 100644 --- a/test/puppet/puppet_class_test.rb +++ b/test/puppet/puppet_class_test.rb @@ -1,5 +1,5 @@ require 'test_helper' -require 'puppet_proxy_common/puppet_class' +require 'puppet_proxy/puppet_class' class PuppetClassTest < Test::Unit::TestCase def test_should_parse_modulename_correctly