r10k 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitattributes +1 -0
- data/.github/pull_request_template.md +1 -0
- data/.github/workflows/docker.yml +56 -0
- data/.github/workflows/release.yml +36 -0
- data/.gitignore +9 -0
- data/.travis.yml +45 -0
- data/CHANGELOG.mkd +1759 -0
- data/CODEOWNERS +2 -0
- data/CONTRIBUTING.mkd +105 -0
- data/Gemfile +15 -0
- data/LICENSE +14 -0
- data/README.mkd +118 -0
- data/Rakefile +3 -0
- data/azure-pipelines.yml +86 -0
- data/bin/r10k +17 -0
- data/doc/common-patterns.mkd +44 -0
- data/doc/dynamic-environments.mkd +31 -0
- data/doc/dynamic-environments/configuration.mkd +669 -0
- data/doc/dynamic-environments/git-environments.mkd +75 -0
- data/doc/dynamic-environments/introduction.mkd +69 -0
- data/doc/dynamic-environments/master-configuration.mkd +40 -0
- data/doc/dynamic-environments/quickstart.mkd +201 -0
- data/doc/dynamic-environments/svn-environments.mkd +45 -0
- data/doc/dynamic-environments/usage.mkd +132 -0
- data/doc/dynamic-environments/workflow-guide.mkd +247 -0
- data/doc/faq.mkd +164 -0
- data/doc/git/cloning-and-mirroring.mkd +60 -0
- data/doc/git/providers.mkd +111 -0
- data/doc/puppetfile.mkd +309 -0
- data/doc/updating-your-puppetfile.mkd +38 -0
- data/docker/.gitignore +1 -0
- data/docker/.rspec +4 -0
- data/docker/Gemfile +11 -0
- data/docker/Makefile +89 -0
- data/docker/README.md +28 -0
- data/docker/r10k/Dockerfile +67 -0
- data/docker/r10k/adduser.sh +13 -0
- data/docker/r10k/docker-entrypoint.d/10-analytics.sh +30 -0
- data/docker/r10k/docker-entrypoint.sh +11 -0
- data/docker/r10k/release.Dockerfile +54 -0
- data/docker/spec/dockerfile_spec.rb +43 -0
- data/docker/spec/fixtures/Puppetfile +2 -0
- data/integration/Gemfile +19 -0
- data/integration/README.mkd +29 -0
- data/integration/Rakefile +77 -0
- data/integration/component/pre-suite/05_install_dev_r10k.rb +12 -0
- data/integration/files/README.mkd +4 -0
- data/integration/files/hiera.yaml +8 -0
- data/integration/files/modules/helloworld/manifests/init.pp +3 -0
- data/integration/files/modules/hieratest/manifests/init.pp +3 -0
- data/integration/files/modules/unicode/files/pretend_unicode +1 -0
- data/integration/files/modules/unicode/manifests/init.pp +6 -0
- data/integration/files/pre-suite/git_config.pp.erb +19 -0
- data/integration/files/pre-suite/prod_env.config +3 -0
- data/integration/files/r10k_conf.yaml.erb +9 -0
- data/integration/lib/README.mkd +4 -0
- data/integration/lib/git_utils.rb +205 -0
- data/integration/lib/master_manipulator.rb +205 -0
- data/integration/lib/r10k_utils.rb +222 -0
- data/integration/manifests/README.mkd +4 -0
- data/integration/pre-suite/00_pe_install.rb +6 -0
- data/integration/pre-suite/10_git_config.rb +48 -0
- data/integration/pre-suite/20_pe_r10k.rb +55 -0
- data/integration/pre-suite/README.mkd +5 -0
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_forge_source.rb +72 -0
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +70 -0
- data/integration/tests/README.mkd +4 -0
- data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +83 -0
- data/integration/tests/basic_functionality/negative/neg_deploy_with_invalid_r10k_yaml.rb +51 -0
- data/integration/tests/basic_functionality/negative/neg_deploy_with_missing_r10k_yaml.rb +28 -0
- data/integration/tests/basic_functionality/negative/neg_invalid_git_provider.rb +45 -0
- data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +34 -0
- data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +103 -0
- data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +128 -0
- data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +61 -0
- data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +109 -0
- data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +108 -0
- data/integration/tests/command_line/deploy_env_without_mod_update.rb +76 -0
- data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +77 -0
- data/integration/tests/command_line/negative/neg_invalid_cmd_line_arg.rb +23 -0
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +70 -0
- data/integration/tests/git_source/git_source_git.rb +128 -0
- data/integration/tests/git_source/git_source_ssh.rb +87 -0
- data/integration/tests/git_source/git_source_submodule.rb +70 -0
- data/integration/tests/git_source/negative/neg_git_broken_remote.rb +38 -0
- data/integration/tests/git_source/negative/neg_git_unauthorized_https.rb +46 -0
- data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +73 -0
- data/integration/tests/git_source/negative/neg_git_unicode_branch.rb +35 -0
- data/integration/tests/i18n/deploy_module_with_unicode_in_file_name.rb +64 -0
- data/integration/tests/purging/content_not_purged_at_root.rb +89 -0
- data/integration/tests/purging/default_purging.rb +125 -0
- data/integration/tests/purging/does_not_purge_files_on_white_list.rb +93 -0
- data/integration/tests/purging/invalid_whitelist_types.rb +63 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_1000_branches.rb +66 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +111 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +117 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_hiera.rb +100 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_multi_source.rb +133 -0
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +161 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_basedir.rb +46 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +48 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +45 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +43 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_remote.rb +45 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_branch_name_collision.rb +64 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +44 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +58 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_env_name.rb +34 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_puppet_file.rb +36 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +49 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_read_only.rb +58 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +51 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +104 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +81 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_module.rb +49 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +82 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +68 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_non-existent_base_dir.rb +94 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +93 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +117 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_unicode_paths.rb +60 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +166 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +163 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +111 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +78 -0
- data/integration/tests/user_scenario/complex_workflow/single_env_git_module_update.rb +100 -0
- data/lib/r10k.rb +11 -0
- data/lib/r10k/action/base.rb +31 -0
- data/lib/r10k/action/cri_runner.rb +72 -0
- data/lib/r10k/action/deploy.rb +9 -0
- data/lib/r10k/action/deploy/deploy_helpers.rb +34 -0
- data/lib/r10k/action/deploy/display.rb +89 -0
- data/lib/r10k/action/deploy/environment.rb +196 -0
- data/lib/r10k/action/deploy/module.rb +84 -0
- data/lib/r10k/action/puppetfile.rb +10 -0
- data/lib/r10k/action/puppetfile/check.rb +31 -0
- data/lib/r10k/action/puppetfile/cri_runner.rb +26 -0
- data/lib/r10k/action/puppetfile/install.rb +45 -0
- data/lib/r10k/action/puppetfile/purge.rb +28 -0
- data/lib/r10k/action/runner.rb +96 -0
- data/lib/r10k/action/visitor.rb +31 -0
- data/lib/r10k/cli.rb +51 -0
- data/lib/r10k/cli/deploy.rb +114 -0
- data/lib/r10k/cli/ext/logging.rb +15 -0
- data/lib/r10k/cli/help.rb +7 -0
- data/lib/r10k/cli/puppetfile.rb +74 -0
- data/lib/r10k/cli/version.rb +31 -0
- data/lib/r10k/deployment.rb +132 -0
- data/lib/r10k/deployment/config.rb +56 -0
- data/lib/r10k/environment.rb +37 -0
- data/lib/r10k/environment/bare.rb +16 -0
- data/lib/r10k/environment/base.rb +150 -0
- data/lib/r10k/environment/git.rb +81 -0
- data/lib/r10k/environment/name.rb +86 -0
- data/lib/r10k/environment/svn.rb +91 -0
- data/lib/r10k/environment/with_modules.rb +139 -0
- data/lib/r10k/errors.rb +61 -0
- data/lib/r10k/errors/formatting.rb +28 -0
- data/lib/r10k/feature.rb +56 -0
- data/lib/r10k/feature/collection.rb +23 -0
- data/lib/r10k/features.rb +20 -0
- data/lib/r10k/forge/module_release.rb +228 -0
- data/lib/r10k/git.rb +196 -0
- data/lib/r10k/git/alternates.rb +63 -0
- data/lib/r10k/git/cache.rb +108 -0
- data/lib/r10k/git/errors.rb +34 -0
- data/lib/r10k/git/rugged.rb +17 -0
- data/lib/r10k/git/rugged/bare_repository.rb +85 -0
- data/lib/r10k/git/rugged/base_repository.rb +93 -0
- data/lib/r10k/git/rugged/cache.rb +11 -0
- data/lib/r10k/git/rugged/credentials.rb +91 -0
- data/lib/r10k/git/rugged/thin_repository.rb +89 -0
- data/lib/r10k/git/rugged/working_repository.rb +145 -0
- data/lib/r10k/git/shellgit.rb +9 -0
- data/lib/r10k/git/shellgit/bare_repository.rb +43 -0
- data/lib/r10k/git/shellgit/base_repository.rb +137 -0
- data/lib/r10k/git/shellgit/cache.rb +11 -0
- data/lib/r10k/git/shellgit/thin_repository.rb +69 -0
- data/lib/r10k/git/shellgit/working_repository.rb +111 -0
- data/lib/r10k/git/stateful_repository.rb +95 -0
- data/lib/r10k/initializers.rb +67 -0
- data/lib/r10k/instance_cache.rb +32 -0
- data/lib/r10k/keyed_factory.rb +39 -0
- data/lib/r10k/logging.rb +109 -0
- data/lib/r10k/logging/terminaloutputter.rb +36 -0
- data/lib/r10k/module.rb +38 -0
- data/lib/r10k/module/base.rb +113 -0
- data/lib/r10k/module/forge.rb +177 -0
- data/lib/r10k/module/git.rb +109 -0
- data/lib/r10k/module/local.rb +36 -0
- data/lib/r10k/module/metadata_file.rb +31 -0
- data/lib/r10k/module/svn.rb +112 -0
- data/lib/r10k/puppetfile.rb +286 -0
- data/lib/r10k/settings.rb +194 -0
- data/lib/r10k/settings/collection.rb +123 -0
- data/lib/r10k/settings/container.rb +97 -0
- data/lib/r10k/settings/definition.rb +124 -0
- data/lib/r10k/settings/enum_definition.rb +30 -0
- data/lib/r10k/settings/helpers.rb +38 -0
- data/lib/r10k/settings/list.rb +107 -0
- data/lib/r10k/settings/loader.rb +99 -0
- data/lib/r10k/settings/mixin.rb +54 -0
- data/lib/r10k/settings/uri_definition.rb +19 -0
- data/lib/r10k/source.rb +42 -0
- data/lib/r10k/source/base.rb +74 -0
- data/lib/r10k/source/exec.rb +51 -0
- data/lib/r10k/source/git.rb +142 -0
- data/lib/r10k/source/hash.rb +182 -0
- data/lib/r10k/source/svn.rb +136 -0
- data/lib/r10k/source/yaml.rb +20 -0
- data/lib/r10k/source/yamldir.rb +32 -0
- data/lib/r10k/svn.rb +6 -0
- data/lib/r10k/svn/remote.rb +68 -0
- data/lib/r10k/svn/working_dir.rb +125 -0
- data/lib/r10k/util/attempt.rb +84 -0
- data/lib/r10k/util/basedir.rb +65 -0
- data/lib/r10k/util/commands.rb +31 -0
- data/lib/r10k/util/exec_env.rb +36 -0
- data/lib/r10k/util/license.rb +24 -0
- data/lib/r10k/util/platform.rb +42 -0
- data/lib/r10k/util/purgeable.rb +88 -0
- data/lib/r10k/util/setopts.rb +55 -0
- data/lib/r10k/util/subprocess.rb +84 -0
- data/lib/r10k/util/subprocess/result.rb +56 -0
- data/lib/r10k/util/subprocess/runner.rb +26 -0
- data/lib/r10k/util/subprocess/runner/jruby.rb +23 -0
- data/lib/r10k/util/subprocess/runner/posix.rb +103 -0
- data/lib/r10k/util/subprocess/runner/pump.rb +59 -0
- data/lib/r10k/util/subprocess/runner/windows.rb +23 -0
- data/lib/r10k/util/subprocess/subprocess_error.rb +24 -0
- data/lib/r10k/util/symbolize_keys.rb +35 -0
- data/lib/r10k/version.rb +6 -0
- data/locales/config.yaml +21 -0
- data/locales/r10k.pot +545 -0
- data/r10k.gemspec +50 -0
- data/r10k.yaml.example +112 -0
- data/spec/fixtures/empty/.empty +0 -0
- data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
- data/spec/fixtures/module/forge/bad_module/metadata.json +1 -0
- data/spec/fixtures/module/forge/eight_hundred/Modulefile +8 -0
- data/spec/fixtures/module/forge/eight_hundred/metadata.json +19 -0
- data/spec/fixtures/unit/action/r10k.yaml +5 -0
- data/spec/fixtures/unit/action/r10k_cachedir.yaml +2 -0
- data/spec/fixtures/unit/action/r10k_generate_types.yaml +3 -0
- data/spec/fixtures/unit/action/r10k_puppet_path.yaml +3 -0
- data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +5 -0
- data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +10 -0
- data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +1 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
- data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +3 -0
- data/spec/integration/git/rugged/bare_repository_spec.rb +13 -0
- data/spec/integration/git/rugged/thin_repository_spec.rb +14 -0
- data/spec/integration/git/rugged/working_repository_spec.rb +48 -0
- data/spec/integration/git/shellgit/bare_repository_spec.rb +13 -0
- data/spec/integration/git/shellgit/thin_repository_spec.rb +14 -0
- data/spec/integration/git/shellgit/working_repository_spec.rb +13 -0
- data/spec/integration/git/stateful_repository_spec.rb +159 -0
- data/spec/matchers/exit_with.rb +28 -0
- data/spec/matchers/match_realpath.rb +18 -0
- data/spec/r10k-mocks.rb +3 -0
- data/spec/r10k-mocks/mock_config.rb +33 -0
- data/spec/r10k-mocks/mock_env.rb +15 -0
- data/spec/r10k-mocks/mock_source.rb +13 -0
- data/spec/shared-contexts/git-fixtures.rb +55 -0
- data/spec/shared-examples/deploy-actions.rb +69 -0
- data/spec/shared-examples/git-repository.rb +38 -0
- data/spec/shared-examples/git/bare_repository.rb +132 -0
- data/spec/shared-examples/git/thin_repository.rb +26 -0
- data/spec/shared-examples/git/working_repository.rb +207 -0
- data/spec/shared-examples/puppetfile-action.rb +39 -0
- data/spec/shared-examples/settings/ancestry.rb +44 -0
- data/spec/shared-examples/subprocess-runner.rb +83 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/unit/action/cri_runner_spec.rb +72 -0
- data/spec/unit/action/deploy/deploy_helpers_spec.rb +38 -0
- data/spec/unit/action/deploy/display_spec.rb +31 -0
- data/spec/unit/action/deploy/environment_spec.rb +395 -0
- data/spec/unit/action/deploy/module_spec.rb +139 -0
- data/spec/unit/action/puppetfile/check_spec.rb +41 -0
- data/spec/unit/action/puppetfile/cri_runner_spec.rb +47 -0
- data/spec/unit/action/puppetfile/install_spec.rb +84 -0
- data/spec/unit/action/puppetfile/purge_spec.rb +42 -0
- data/spec/unit/action/runner_spec.rb +213 -0
- data/spec/unit/action/visitor_spec.rb +39 -0
- data/spec/unit/cli_spec.rb +9 -0
- data/spec/unit/deployment/config_spec.rb +33 -0
- data/spec/unit/deployment_spec.rb +162 -0
- data/spec/unit/environment/base_spec.rb +109 -0
- data/spec/unit/environment/git_spec.rb +97 -0
- data/spec/unit/environment/name_spec.rb +135 -0
- data/spec/unit/environment/svn_spec.rb +133 -0
- data/spec/unit/errors/formatting_spec.rb +84 -0
- data/spec/unit/feature_spec.rb +50 -0
- data/spec/unit/forge/module_release_spec.rb +213 -0
- data/spec/unit/git/alternates_spec.rb +116 -0
- data/spec/unit/git/cache_spec.rb +55 -0
- data/spec/unit/git/rugged/cache_spec.rb +29 -0
- data/spec/unit/git/rugged/credentials_spec.rb +109 -0
- data/spec/unit/git/shellgit/cache_spec.rb +27 -0
- data/spec/unit/git/stateful_repository_spec.rb +40 -0
- data/spec/unit/git_spec.rb +102 -0
- data/spec/unit/initializers_spec.rb +68 -0
- data/spec/unit/instance_cache_spec.rb +78 -0
- data/spec/unit/keyed_factory_spec.rb +51 -0
- data/spec/unit/logging/terminaloutputter_spec.rb +53 -0
- data/spec/unit/logging_spec.rb +68 -0
- data/spec/unit/module/base_spec.rb +72 -0
- data/spec/unit/module/forge_spec.rb +207 -0
- data/spec/unit/module/git_spec.rb +274 -0
- data/spec/unit/module/metadata_file_spec.rb +68 -0
- data/spec/unit/module/svn_spec.rb +178 -0
- data/spec/unit/module_spec.rb +29 -0
- data/spec/unit/puppetfile_spec.rb +300 -0
- data/spec/unit/settings/collection_spec.rb +123 -0
- data/spec/unit/settings/container_spec.rb +92 -0
- data/spec/unit/settings/definition_spec.rb +79 -0
- data/spec/unit/settings/enum_definition_spec.rb +20 -0
- data/spec/unit/settings/inheritance_spec.rb +38 -0
- data/spec/unit/settings/list_spec.rb +88 -0
- data/spec/unit/settings/loader_spec.rb +110 -0
- data/spec/unit/settings/uri_definition_spec.rb +23 -0
- data/spec/unit/settings_spec.rb +246 -0
- data/spec/unit/source/base_spec.rb +31 -0
- data/spec/unit/source/exec_spec.rb +81 -0
- data/spec/unit/source/git_spec.rb +185 -0
- data/spec/unit/source/hash_spec.rb +54 -0
- data/spec/unit/source/svn_spec.rb +196 -0
- data/spec/unit/source/yaml_spec.rb +42 -0
- data/spec/unit/source_spec.rb +10 -0
- data/spec/unit/svn/remote_spec.rb +21 -0
- data/spec/unit/svn/working_dir_spec.rb +56 -0
- data/spec/unit/util/attempt_spec.rb +82 -0
- data/spec/unit/util/commands_spec.rb +61 -0
- data/spec/unit/util/exec_env_spec.rb +56 -0
- data/spec/unit/util/purgeable_spec.rb +230 -0
- data/spec/unit/util/setopts_spec.rb +59 -0
- data/spec/unit/util/subprocess/result_spec.rb +36 -0
- data/spec/unit/util/subprocess/runner/posix_spec.rb +7 -0
- data/spec/unit/util/subprocess/runner/pump_spec.rb +79 -0
- data/spec/unit/util/subprocess/runner/windows_spec.rb +7 -0
- data/spec/unit/util/subprocess/subprocess_error_spec.rb +26 -0
- data/spec/unit/util/subprocess_spec.rb +65 -0
- data/spec/unit/util/symbolize_keys_spec.rb +67 -0
- metadata +582 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'r10k/settings'
|
|
4
|
+
|
|
5
|
+
describe R10K::Settings::Container do
|
|
6
|
+
|
|
7
|
+
describe 'validating keys' do
|
|
8
|
+
it 'can add new valid keys' do
|
|
9
|
+
subject.add_valid_key(:v)
|
|
10
|
+
subject[:v]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'can check if a key is valid' do
|
|
14
|
+
subject.add_valid_key(:v)
|
|
15
|
+
expect(subject.valid_key?(:v)).to be_truthy
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'can list all valid keys' do
|
|
19
|
+
subject.add_valid_key(:v)
|
|
20
|
+
subject.add_valid_key(:w)
|
|
21
|
+
|
|
22
|
+
expect(subject.valid_keys).to include :v
|
|
23
|
+
expect(subject.valid_keys).to include :w
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe 'specifying settings' do
|
|
28
|
+
it 'fails if a setting application uses an invalid key' do
|
|
29
|
+
expect { subject[:invalid] = 'fail' }.to raise_error R10K::Settings::Container::InvalidKey
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'can look up values that it sets' do
|
|
33
|
+
subject.add_valid_key :v
|
|
34
|
+
subject[:v] = 'set'
|
|
35
|
+
expect(subject[:v]).to eq 'set'
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe 'looking up settings' do
|
|
40
|
+
before do
|
|
41
|
+
subject.add_valid_key :v
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'fails if a setting lookup uses an invalid key' do
|
|
45
|
+
expect { subject[:invalid] }.to raise_error R10K::Settings::Container::InvalidKey
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'returns nil if a key is valid but no setting is present' do
|
|
49
|
+
expect(subject[:v]).to be_nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe 'with a parent container' do
|
|
53
|
+
let(:parent) { described_class.new.tap { |p| p.add_valid_key :v } }
|
|
54
|
+
subject { described_class.new(parent) }
|
|
55
|
+
|
|
56
|
+
it 'uses its setting over a parent value' do
|
|
57
|
+
subject[:v] = 'child'
|
|
58
|
+
parent[:v] = 'parent'
|
|
59
|
+
expect(subject[:v]).to eq 'child'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'duplicates and stores the parent object to avoid modifying the parent object' do
|
|
63
|
+
parent[:v] = {}
|
|
64
|
+
subject[:v][:hello] = "world"
|
|
65
|
+
expect(subject[:v]).to eq({hello: "world"})
|
|
66
|
+
expect(parent[:v]).to eq({})
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'falls back to the parent value if it does not have a value' do
|
|
70
|
+
parent[:v] = 'parent'
|
|
71
|
+
expect(subject[:v]).to eq 'parent'
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "resetting" do
|
|
77
|
+
before do
|
|
78
|
+
subject.add_valid_key :v
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "unsets all settings" do
|
|
82
|
+
subject[:v] = "hi"
|
|
83
|
+
subject.reset!
|
|
84
|
+
expect(subject[:v]).to be_nil
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "doesn't remove valid values" do
|
|
88
|
+
subject.reset!
|
|
89
|
+
expect(subject.valid_key?(:v)).to be_truthy
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/settings/definition'
|
|
3
|
+
require 'r10k/settings/collection'
|
|
4
|
+
require 'r10k/settings/list'
|
|
5
|
+
|
|
6
|
+
describe R10K::Settings::Definition do
|
|
7
|
+
subject { described_class.new(:setting) }
|
|
8
|
+
|
|
9
|
+
it_behaves_like "a setting with ancestors"
|
|
10
|
+
|
|
11
|
+
describe "#evaluate" do
|
|
12
|
+
it "assigns a value, validates it, and resolves a final value" do
|
|
13
|
+
expect(subject).to receive(:assign).with("myvalue")
|
|
14
|
+
expect(subject).to receive(:validate)
|
|
15
|
+
expect(subject).to receive(:resolve)
|
|
16
|
+
subject.evaluate("myvalue")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "#assign" do
|
|
21
|
+
it 'stores the provided value' do
|
|
22
|
+
subject.assign("I'm the value")
|
|
23
|
+
expect(subject.value).to eq "I'm the value"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "normalizes the stored value when a normalize hook is set" do
|
|
27
|
+
subject = described_class.new(:setting, :normalize => lambda { |input| input.to_sym })
|
|
28
|
+
subject.assign("symbolizeme")
|
|
29
|
+
expect(subject.value).to eq :symbolizeme
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "#validate" do
|
|
34
|
+
it "does nothing if a value has not been assigned" do
|
|
35
|
+
subject = described_class.new(:setting, :validate => lambda { |_| raise "Shouldn't be called" })
|
|
36
|
+
subject.validate
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "does nothing if a validate hook has not been assigned" do
|
|
40
|
+
subject.assign("I'm the value")
|
|
41
|
+
subject.validate
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "raises up errors raised from the validate hook" do
|
|
45
|
+
subject = described_class.new(:satellite, :validate => lambda { |input| raise ArgumentError, "Invalid value #{input}: that's no moon!" })
|
|
46
|
+
subject.assign("Alderaan")
|
|
47
|
+
expect {
|
|
48
|
+
subject.validate
|
|
49
|
+
}.to raise_error(ArgumentError, "Invalid value Alderaan: that's no moon!")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "returns if the validate hook did not raise an error" do
|
|
53
|
+
subject = described_class.new(:setting, :validate => lambda { |_| "That's a moon" })
|
|
54
|
+
subject.assign("Mun")
|
|
55
|
+
subject.validate
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "#resolve" do
|
|
60
|
+
it "returns the value when the value has been given" do
|
|
61
|
+
subject.assign("Mun")
|
|
62
|
+
expect(subject.resolve).to eq "Mun"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "resolves the default when the default is a proc" do
|
|
66
|
+
subject = described_class.new(:setting, :default => lambda { "Minmus" })
|
|
67
|
+
expect(subject.resolve).to eq "Minmus"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "returns the default when the default is not a proc" do
|
|
71
|
+
subject = described_class.new(:setting, :default => "Ike")
|
|
72
|
+
expect(subject.resolve).to eq "Ike"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "returns nil when there is no value nor default" do
|
|
76
|
+
expect(subject.resolve).to be_nil
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/settings/enum_definition'
|
|
3
|
+
|
|
4
|
+
describe R10K::Settings::EnumDefinition do
|
|
5
|
+
|
|
6
|
+
subject { described_class.new(:enum, :enum => %w[one two three]) }
|
|
7
|
+
|
|
8
|
+
describe '#validate' do
|
|
9
|
+
it "doesn't raise an error when given an expected value" do
|
|
10
|
+
subject.assign('two')
|
|
11
|
+
subject.validate
|
|
12
|
+
end
|
|
13
|
+
it "raises an error when given a value outside the enum" do
|
|
14
|
+
subject.assign('dos')
|
|
15
|
+
expect {
|
|
16
|
+
subject.validate
|
|
17
|
+
}.to raise_error(ArgumentError, "Setting enum should be one of #{%w[one two three].inspect}, not 'dos'")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/settings/collection'
|
|
3
|
+
require 'r10k/settings/definition'
|
|
4
|
+
|
|
5
|
+
RSpec.describe 'R10K::Settings inheritance' do
|
|
6
|
+
subject do
|
|
7
|
+
R10K::Settings::Collection.new(:parent_settings, [
|
|
8
|
+
R10K::Settings::Definition.new(:banana, {
|
|
9
|
+
:default => 'cavendish',
|
|
10
|
+
}),
|
|
11
|
+
|
|
12
|
+
R10K::Settings::Collection.new(:child_settings, [
|
|
13
|
+
R10K::Settings::Definition.new(:banana, {
|
|
14
|
+
:default => :inherit,
|
|
15
|
+
}),
|
|
16
|
+
]),
|
|
17
|
+
])
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "child settings" do
|
|
21
|
+
let(:setting) { subject[:child_settings][:banana] }
|
|
22
|
+
|
|
23
|
+
context "when child value is not set" do
|
|
24
|
+
it "should resolve to default value from parent" do
|
|
25
|
+
expect(setting.value).to be_nil
|
|
26
|
+
expect(setting.resolve).to eq 'cavendish'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context "when child value is set" do
|
|
31
|
+
before(:each) { setting.assign('gros michel') }
|
|
32
|
+
|
|
33
|
+
it "should resolve to child value" do
|
|
34
|
+
expect(setting.resolve).to eq 'gros michel'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/settings/list'
|
|
3
|
+
require 'r10k/settings/collection'
|
|
4
|
+
require 'r10k/settings/definition'
|
|
5
|
+
require 'r10k/settings/uri_definition'
|
|
6
|
+
|
|
7
|
+
describe R10K::Settings::List do
|
|
8
|
+
let(:item_proc) do
|
|
9
|
+
lambda { R10K::Settings::URIDefinition.new(nil, { :desc => "A URI in a list" }) }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
subject do
|
|
13
|
+
described_class.new(:test_list, item_proc, { :desc => "A test setting list" })
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it_behaves_like "a setting with ancestors"
|
|
17
|
+
|
|
18
|
+
describe '#assign' do
|
|
19
|
+
it "calls item_proc for each item assigned" do
|
|
20
|
+
expect(R10K::Settings::URIDefinition).to receive(:new).and_call_original.exactly(3).times
|
|
21
|
+
|
|
22
|
+
subject.assign([ "uri_1", "uri_2", "uri_3"])
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "claims ownership of newly added items" do
|
|
26
|
+
subject.assign([ "uri_1", "uri_2", "uri_3"])
|
|
27
|
+
|
|
28
|
+
item_parents = subject.instance_variable_get(:@items).collect { |i| i.parent }
|
|
29
|
+
expect(item_parents).to all(eq subject)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "assigns value to each item" do
|
|
33
|
+
new_values = [ "uri_1", "uri_2", "uri_3"]
|
|
34
|
+
subject.assign(new_values)
|
|
35
|
+
|
|
36
|
+
item_values = subject.instance_variable_get(:@items).collect { |i| i.value }
|
|
37
|
+
expect(item_values).to eq new_values
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "silently ignores attempts to assign nil" do
|
|
41
|
+
subject.assign(nil)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe '#validate' do
|
|
46
|
+
it "raises an error containing a list of every item with validation errors" do
|
|
47
|
+
subject.assign([ "uri 1", "uri 2", "http://www.example.com"])
|
|
48
|
+
|
|
49
|
+
expect { subject.validate }.to raise_error do |error|
|
|
50
|
+
expect(error).to be_a_kind_of(R10K::Settings::List::ValidationError)
|
|
51
|
+
errors = error.errors.collect { |key, val| val }
|
|
52
|
+
expect(errors.size).to eq 2
|
|
53
|
+
expect(errors).to all(be_a_kind_of(ArgumentError))
|
|
54
|
+
expect(errors.collect { |e| e.message }).to all(match /requires a URL.*could not be parsed/i)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "it does not raise an error if no errors were found" do
|
|
59
|
+
subject.assign([ "http://www.example.com" ])
|
|
60
|
+
expect(subject.validate).to be_nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe '#resolve' do
|
|
65
|
+
it "returns a frozen list of all items" do
|
|
66
|
+
subject.assign([ "uri_1", "uri_2" ])
|
|
67
|
+
|
|
68
|
+
rv = subject.resolve
|
|
69
|
+
|
|
70
|
+
expect(rv).to be_frozen
|
|
71
|
+
expect(rv).to eq([ "uri_1", "uri_2" ])
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe R10K::Settings::List::ValidationError do
|
|
77
|
+
subject do
|
|
78
|
+
described_class.new("Sample List Validation Errors", errors: {
|
|
79
|
+
2 => ArgumentError.new("Sample List Item Error"),
|
|
80
|
+
})
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "generates a human readable error message for the invalid item" do
|
|
84
|
+
message = subject.format
|
|
85
|
+
|
|
86
|
+
expect(message).to match /sample list validation errors.*item 2.*sample list item error/im
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/settings/loader'
|
|
3
|
+
|
|
4
|
+
describe R10K::Settings::Loader do
|
|
5
|
+
|
|
6
|
+
context 'populate_loadpath' do
|
|
7
|
+
it 'includes /etc/puppetlabs/r10k/r10k.yaml in the loadpath' do
|
|
8
|
+
expect(subject.loadpath).to include('/etc/puppetlabs/r10k/r10k.yaml')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'includes /etc/r10k.yaml in the loadpath' do
|
|
12
|
+
expect(subject.loadpath).to include('/etc/r10k.yaml')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'does include the current working directory in the loadpath' do
|
|
16
|
+
allow(Dir).to receive(:getwd).and_return '/some/random/path/westvletren'
|
|
17
|
+
expect(subject.loadpath).to include('/some/random/path/westvletren/r10k.yaml')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'does not include /some/random/path/atomium/r10k.yaml in the loadpath' do
|
|
21
|
+
expect(subject.loadpath).not_to include('/some/random/path/atomium/r10k.yaml')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context 'search' do
|
|
27
|
+
it 'returns the correct default location' do
|
|
28
|
+
allow(File).to receive(:file?).and_return false
|
|
29
|
+
allow(File).to receive(:file?).with('/etc/puppetlabs/r10k/r10k.yaml').and_return true
|
|
30
|
+
allow(File).to receive(:file?).with('/etc/r10k.yaml').and_return true
|
|
31
|
+
expect(subject.search).to eq '/etc/puppetlabs/r10k/r10k.yaml'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'issues a warning if both default locations are present' do
|
|
35
|
+
allow(File).to receive(:file?).and_return false
|
|
36
|
+
allow(File).to receive(:file?).with('/etc/puppetlabs/r10k/r10k.yaml').and_return true
|
|
37
|
+
allow(File).to receive(:file?).with('/etc/r10k.yaml').and_return true
|
|
38
|
+
|
|
39
|
+
logger_dbl = double('Logging')
|
|
40
|
+
allow(subject).to receive(:logger).and_return logger_dbl
|
|
41
|
+
|
|
42
|
+
expect(logger_dbl).to receive(:warn).with('Both /etc/puppetlabs/r10k/r10k.yaml and /etc/r10k.yaml configuration files exist.')
|
|
43
|
+
expect(logger_dbl).to receive(:warn).with('/etc/puppetlabs/r10k/r10k.yaml will be used.')
|
|
44
|
+
|
|
45
|
+
subject.search
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'issues a warning if the old location is used' do
|
|
49
|
+
allow(File).to receive(:file?).and_return false
|
|
50
|
+
allow(File).to receive(:file?).with('/etc/puppetlabs/r10k/r10k.yaml').and_return false
|
|
51
|
+
allow(File).to receive(:file?).with('/etc/r10k.yaml').and_return true
|
|
52
|
+
|
|
53
|
+
logger_dbl = double('Logging')
|
|
54
|
+
allow(subject).to receive(:logger).and_return logger_dbl
|
|
55
|
+
|
|
56
|
+
expect(logger_dbl).to receive(:warn).with("The r10k configuration file at /etc/r10k.yaml is deprecated.")
|
|
57
|
+
expect(logger_dbl).to receive(:warn).with('Please move your r10k configuration to /etc/puppetlabs/r10k/r10k.yaml.')
|
|
58
|
+
|
|
59
|
+
subject.search
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe 'using an override value' do
|
|
63
|
+
it 'uses the override when set and ignores files in the load path' do
|
|
64
|
+
expect(File).to_not receive(:file?)
|
|
65
|
+
expect(subject.search('/some/override/r10k.yaml')).to eq '/some/override/r10k.yaml'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'ignores a nil override value' do
|
|
69
|
+
allow(File).to receive(:file?).and_return false
|
|
70
|
+
allow(File).to receive(:file?).with('/etc/puppetlabs/r10k/r10k.yaml').and_return true
|
|
71
|
+
allow(File).to receive(:file?).with('/etc/r10k.yaml').and_return true
|
|
72
|
+
expect(subject.search(nil)).to eq('/etc/puppetlabs/r10k/r10k.yaml')
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context '#read' do
|
|
78
|
+
it "raises an error if no config file could be found" do
|
|
79
|
+
expect(subject).to receive(:search).and_return nil
|
|
80
|
+
expect {
|
|
81
|
+
subject.read
|
|
82
|
+
}.to raise_error(R10K::Settings::Loader::ConfigError, "No configuration file given, no config file found in current directory, and no global config present")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "raises an error if the YAML file load raises an error" do
|
|
86
|
+
expect(subject).to receive(:search).and_return '/some/path/r10k.yaml'
|
|
87
|
+
expect(YAML).to receive(:load_file).and_raise(Errno::ENOENT, "/no/such/file")
|
|
88
|
+
expect {
|
|
89
|
+
subject.read
|
|
90
|
+
}.to raise_error(R10K::Settings::Loader::ConfigError, "Couldn't load config file: No such file or directory - /no/such/file")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "recursively replaces string keys with symbol keys in the parsed structure" do
|
|
94
|
+
expect(subject).to receive(:search).and_return '/some/path/r10k.yaml'
|
|
95
|
+
expect(YAML).to receive(:load_file).and_return({
|
|
96
|
+
'cachedir' => '/var/cache/r10k',
|
|
97
|
+
'git' => {
|
|
98
|
+
'provider' => 'rugged',
|
|
99
|
+
}
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
expect(subject.read).to eq({
|
|
103
|
+
:cachedir => '/var/cache/r10k',
|
|
104
|
+
:git => {
|
|
105
|
+
:provider => 'rugged',
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'r10k/settings/uri_definition'
|
|
3
|
+
|
|
4
|
+
describe R10K::Settings::URIDefinition do
|
|
5
|
+
|
|
6
|
+
subject { described_class.new(:uri) }
|
|
7
|
+
|
|
8
|
+
it "passes validation if a value has not been set" do
|
|
9
|
+
expect(subject.validate).to be_nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "passes validation when given a valid url" do
|
|
13
|
+
subject.assign("http://definitely.a/url")
|
|
14
|
+
expect(subject.validate).to be_nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "raises an error when given an invalid URL" do
|
|
18
|
+
subject.assign("That's no URI!")
|
|
19
|
+
expect {
|
|
20
|
+
subject.validate
|
|
21
|
+
}.to raise_error(ArgumentError, "Setting uri requires a URL but 'That's no URI!' could not be parsed as a URL")
|
|
22
|
+
end
|
|
23
|
+
end
|