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 40a84a1dc..383850be6 100644 --- a/lib/smart_proxy_main.rb +++ b/lib/smart_proxy_main.rb @@ -65,7 +65,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 3eb9ddc2e..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) - 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 caff3fab3..84fc0d4bc 100644 --- a/test/puppet/puppet_api_configuration_test.rb +++ b/test/puppet/puppet_api_configuration_test.rb @@ -1,36 +1,21 @@ require 'test_helper' -require 'puppet_proxy_puppet_api/puppet_proxy_puppet_api' +require 'puppet_proxy/puppet' -class PuppetApiConfigurationTest < Test::Unit::TestCase - def setup - @configuration = ::Proxy::PuppetApi::PluginConfiguration.new - end - - def test_load_programmable_settings_sets_classes_retriever - assert_equal :apiv3, @configuration.load_programmable_settings({})[:classes_retriever] - end - - def test_load_programmable_settings_sets_environments_retriever - assert_equal :apiv3, @configuration.load_programmable_settings({})[: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 +26,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 +37,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