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,74 @@
|
|
|
1
|
+
require 'r10k/cli'
|
|
2
|
+
require 'r10k/puppetfile'
|
|
3
|
+
require 'r10k/action/puppetfile'
|
|
4
|
+
|
|
5
|
+
require 'cri'
|
|
6
|
+
|
|
7
|
+
module R10K::CLI
|
|
8
|
+
module Puppetfile
|
|
9
|
+
def self.command
|
|
10
|
+
@cmd ||= Cri::Command.define do
|
|
11
|
+
name 'puppetfile'
|
|
12
|
+
usage 'puppetfile <subcommand>'
|
|
13
|
+
summary 'Perform operations on a Puppetfile'
|
|
14
|
+
|
|
15
|
+
description <<-DESCRIPTION
|
|
16
|
+
`r10k puppetfile` provides an implementation of the librarian-puppet style
|
|
17
|
+
Puppetfile (http://bombasticmonkey.com/librarian-puppet/).
|
|
18
|
+
DESCRIPTION
|
|
19
|
+
|
|
20
|
+
run do |opts, args, cmd|
|
|
21
|
+
puts cmd.help(:verbose => opts[:verbose])
|
|
22
|
+
exit 0
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module Install
|
|
28
|
+
def self.command
|
|
29
|
+
@cmd ||= Cri::Command.define do
|
|
30
|
+
name 'install'
|
|
31
|
+
usage 'install'
|
|
32
|
+
summary 'Install all modules from a Puppetfile'
|
|
33
|
+
required nil, :moduledir, 'Path to install modules to'
|
|
34
|
+
required nil, :puppetfile, 'Path to puppetfile'
|
|
35
|
+
flag nil, :force, 'Force locally changed files to be overwritten'
|
|
36
|
+
runner R10K::Action::Puppetfile::CriRunner.wrap(R10K::Action::Puppetfile::Install)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
module Check
|
|
42
|
+
def self.command
|
|
43
|
+
@cmd ||= Cri::Command.define do
|
|
44
|
+
name 'check'
|
|
45
|
+
usage 'check'
|
|
46
|
+
summary 'Try and load the Puppetfile to verify the syntax is correct.'
|
|
47
|
+
|
|
48
|
+
required nil, :puppetfile, 'Path to Puppetfile'
|
|
49
|
+
runner R10K::Action::Puppetfile::CriRunner.wrap(R10K::Action::Puppetfile::Check)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
module Purge
|
|
55
|
+
def self.command
|
|
56
|
+
@cmd ||= Cri::Command.define do
|
|
57
|
+
name 'purge'
|
|
58
|
+
usage 'purge'
|
|
59
|
+
summary 'Purge unmanaged modules from a Puppetfile managed directory'
|
|
60
|
+
|
|
61
|
+
required nil, :moduledir, 'Path to install modules to'
|
|
62
|
+
required nil, :puppetfile, 'Path to Puppetfile'
|
|
63
|
+
runner R10K::Action::Puppetfile::CriRunner.wrap(R10K::Action::Puppetfile::Purge)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
R10K::CLI.command.add_command(R10K::CLI::Puppetfile.command)
|
|
71
|
+
|
|
72
|
+
R10K::CLI::Puppetfile.command.add_command(R10K::CLI::Puppetfile::Install.command)
|
|
73
|
+
R10K::CLI::Puppetfile.command.add_command(R10K::CLI::Puppetfile::Check.command)
|
|
74
|
+
R10K::CLI::Puppetfile.command.add_command(R10K::CLI::Puppetfile::Purge.command)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'r10k/cli'
|
|
2
|
+
require 'r10k/version'
|
|
3
|
+
|
|
4
|
+
require 'cri'
|
|
5
|
+
|
|
6
|
+
module R10K::CLI
|
|
7
|
+
module Version
|
|
8
|
+
def self.command
|
|
9
|
+
@cmd ||= Cri::Command.define do
|
|
10
|
+
name 'version'
|
|
11
|
+
usage 'version'
|
|
12
|
+
summary 'Print the version of r10k'
|
|
13
|
+
|
|
14
|
+
run do |opts, args, cmd|
|
|
15
|
+
puts "r10k #{R10K::VERSION}"
|
|
16
|
+
if opts[:verbose]
|
|
17
|
+
puts RUBY_DESCRIPTION
|
|
18
|
+
cmdpath = caller.last.slice(/\A.*#{$PROGRAM_NAME}/)
|
|
19
|
+
puts "Command path: #{cmdpath}"
|
|
20
|
+
puts "Interpreter path: #{Gem.ruby}"
|
|
21
|
+
if RUBY_VERSION >= '1.9'
|
|
22
|
+
puts "Default encoding: #{Encoding.default_external.name}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
exit 0
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
self.command.add_command(Version.command)
|
|
31
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
require 'r10k/source'
|
|
2
|
+
require 'r10k/util/basedir'
|
|
3
|
+
require 'r10k/errors'
|
|
4
|
+
require 'set'
|
|
5
|
+
|
|
6
|
+
module R10K
|
|
7
|
+
# A deployment models the entire state of the configuration that a Puppet
|
|
8
|
+
# master can use. It contains a set of sources that can produce environments
|
|
9
|
+
# and manages the contents of directories where environments are deployed.
|
|
10
|
+
#
|
|
11
|
+
# @api private
|
|
12
|
+
class Deployment
|
|
13
|
+
|
|
14
|
+
require 'r10k/deployment/config'
|
|
15
|
+
|
|
16
|
+
# Generate a deployment object based on a config
|
|
17
|
+
#
|
|
18
|
+
# @deprecated
|
|
19
|
+
#
|
|
20
|
+
# @param path [String] The path to the deployment config
|
|
21
|
+
# @return [R10K::Deployment] The deployment loaded with the given config
|
|
22
|
+
def self.load_config(path, overrides={})
|
|
23
|
+
config = R10K::Deployment::Config.new(path, overrides)
|
|
24
|
+
new(config)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @!attribute [r] config
|
|
28
|
+
# @return [R10K::Deployment::Config]
|
|
29
|
+
attr_reader :config
|
|
30
|
+
|
|
31
|
+
def initialize(config)
|
|
32
|
+
@config = config
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def preload!
|
|
36
|
+
sources.each(&:preload!)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Lazily load all sources
|
|
40
|
+
#
|
|
41
|
+
# This instantiates the @_sources instance variable, but should not be
|
|
42
|
+
# used directly as it could be legitimately unset if we're doing lazy
|
|
43
|
+
# loading.
|
|
44
|
+
#
|
|
45
|
+
# @return [Array<R10K::Source::Base>] All repository sources
|
|
46
|
+
# specified in the config
|
|
47
|
+
def sources
|
|
48
|
+
load_sources if @_sources.nil?
|
|
49
|
+
@_sources
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Lazily load all environments
|
|
53
|
+
#
|
|
54
|
+
# This instantiates the @_environments instance variable, but should not be
|
|
55
|
+
# used directly as it could be legitimately unset if we're doing lazy
|
|
56
|
+
# loading.
|
|
57
|
+
#
|
|
58
|
+
# @return [Array<R10K::Environment::Base>] All enviroments across
|
|
59
|
+
# all sources
|
|
60
|
+
def environments
|
|
61
|
+
load_environments if @_environments.nil?
|
|
62
|
+
@_environments
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @return [Array<String>] The paths used by all contained sources
|
|
66
|
+
def paths
|
|
67
|
+
paths_and_sources.keys
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @return [Hash<String, Array<R10K::Source::Base>]
|
|
71
|
+
def paths_and_sources
|
|
72
|
+
pathmap = Hash.new { |h, k| h[k] = [] }
|
|
73
|
+
sources.each { |source| pathmap[source.basedir] << source }
|
|
74
|
+
pathmap
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Remove unmanaged content from all source paths
|
|
78
|
+
def purge!
|
|
79
|
+
paths_and_sources.each_pair do |path, sources_at_path|
|
|
80
|
+
R10K::Util::Basedir.new(path, sources_at_path).purge!
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def validate!
|
|
85
|
+
hash = {}
|
|
86
|
+
sources.each do |source|
|
|
87
|
+
source.environments.each do |environment|
|
|
88
|
+
if hash.key?(environment.path)
|
|
89
|
+
osource, oenvironment = hash[environment.path]
|
|
90
|
+
msg = _("Environment collision at %{env_path} between %{source}:%{env_name} and %{osource}:%{oenv_name}") %
|
|
91
|
+
{env_path: environment.path,
|
|
92
|
+
source: source.name,
|
|
93
|
+
env_name: environment.name,
|
|
94
|
+
osource: osource.name,
|
|
95
|
+
oenv_name: oenvironment.name}
|
|
96
|
+
|
|
97
|
+
raise R10K::Error, msg
|
|
98
|
+
else
|
|
99
|
+
hash[environment.path] = [source, environment]
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def accept(visitor)
|
|
106
|
+
visitor.visit(:deployment, self) do
|
|
107
|
+
sources.each do |source|
|
|
108
|
+
source.accept(visitor)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
|
|
115
|
+
def load_sources
|
|
116
|
+
sources = @config[:sources]
|
|
117
|
+
if sources.nil? || sources.empty?
|
|
118
|
+
raise R10K::Error, _("Unable to load sources; the supplied configuration does not define the 'sources' key")
|
|
119
|
+
end
|
|
120
|
+
@_sources = sources.map do |(name, hash)|
|
|
121
|
+
R10K::Source.from_hash(name, hash)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def load_environments
|
|
126
|
+
@_environments = []
|
|
127
|
+
sources.each do |source|
|
|
128
|
+
@_environments += source.environments
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'r10k/deployment'
|
|
2
|
+
require 'r10k/settings/loader'
|
|
3
|
+
require 'r10k/util/symbolize_keys'
|
|
4
|
+
require 'r10k/errors'
|
|
5
|
+
require 'r10k/initializers'
|
|
6
|
+
require 'yaml'
|
|
7
|
+
|
|
8
|
+
module R10K
|
|
9
|
+
class Deployment
|
|
10
|
+
class Config
|
|
11
|
+
|
|
12
|
+
include R10K::Logging
|
|
13
|
+
|
|
14
|
+
attr_accessor :configfile
|
|
15
|
+
|
|
16
|
+
def initialize(configfile, overrides={})
|
|
17
|
+
@configfile = configfile
|
|
18
|
+
@overrides = overrides
|
|
19
|
+
|
|
20
|
+
load_config
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Perform a scan for key and check for both string and symbol keys
|
|
24
|
+
def setting(key)
|
|
25
|
+
@config[key]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
alias [] setting
|
|
29
|
+
|
|
30
|
+
def settings
|
|
31
|
+
@config
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Load and store a config file, and set relevant options
|
|
35
|
+
#
|
|
36
|
+
# @param [String] configfile The path to the YAML config file
|
|
37
|
+
def load_config
|
|
38
|
+
loader = R10K::Settings::Loader.new
|
|
39
|
+
hash = loader.read(@configfile)
|
|
40
|
+
|
|
41
|
+
with_overrides = hash.merge(@overrides) do |key, oldval, newval|
|
|
42
|
+
logger.debug2 _("Overriding config file setting '%{key}': '%{old_val}' -> '%{new_val}'") % {key: key, old_val: oldval, new_val: newval}
|
|
43
|
+
newval
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
@config = R10K::Settings.global_settings.evaluate(with_overrides)
|
|
47
|
+
|
|
48
|
+
initializer = R10K::Initializers::GlobalInitializer.new(@config)
|
|
49
|
+
initializer.call
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class ConfigError < R10K::Error
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module R10K
|
|
2
|
+
module Environment
|
|
3
|
+
def self.factory
|
|
4
|
+
@factory ||= R10K::KeyedFactory.new
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.register(key, klass)
|
|
8
|
+
factory.register(key, klass)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.retrieve(key)
|
|
12
|
+
factory.retrieve(key)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.generate(type, name, basedir, dirname, options = {})
|
|
16
|
+
factory.generate(type, name, basedir, dirname, options)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.from_hash(name, hash)
|
|
20
|
+
R10K::Util::SymbolizeKeys.symbolize_keys!(hash)
|
|
21
|
+
|
|
22
|
+
basedir = hash.delete(:basedir)
|
|
23
|
+
dirname = hash.delete(:dirname) || name
|
|
24
|
+
|
|
25
|
+
type = hash.delete(:type)
|
|
26
|
+
type = type.is_a?(String) ? type.to_sym : type
|
|
27
|
+
|
|
28
|
+
generate(type, name, basedir, dirname, hash)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
require 'r10k/environment/base'
|
|
32
|
+
require 'r10k/environment/with_modules'
|
|
33
|
+
require 'r10k/environment/bare'
|
|
34
|
+
require 'r10k/environment/git'
|
|
35
|
+
require 'r10k/environment/svn'
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
require 'r10k/util/subprocess'
|
|
2
|
+
|
|
3
|
+
# This class defines a common interface for environment implementations.
|
|
4
|
+
#
|
|
5
|
+
# @since 1.3.0
|
|
6
|
+
class R10K::Environment::Base
|
|
7
|
+
|
|
8
|
+
# @!attribute [r] name
|
|
9
|
+
# @return [String] A name for this environment that is unique to the given source
|
|
10
|
+
attr_reader :name
|
|
11
|
+
|
|
12
|
+
# @!attribute [r] basedir
|
|
13
|
+
# @return [String] The path that this environment will be created in
|
|
14
|
+
attr_reader :basedir
|
|
15
|
+
|
|
16
|
+
# @!attribute [r] dirname
|
|
17
|
+
# @return [String] The directory name for the given environment
|
|
18
|
+
attr_reader :dirname
|
|
19
|
+
|
|
20
|
+
# @!attribute [r] path
|
|
21
|
+
# @return [Pathname] The full path to the given environment
|
|
22
|
+
attr_reader :path
|
|
23
|
+
|
|
24
|
+
# @!attribute [r] puppetfile
|
|
25
|
+
# @api public
|
|
26
|
+
# @return [R10K::Puppetfile] The puppetfile instance associated with this environment
|
|
27
|
+
attr_reader :puppetfile
|
|
28
|
+
|
|
29
|
+
# @!attribute [r] puppetfile_name
|
|
30
|
+
# @api public
|
|
31
|
+
# @return [String] The puppetfile name (relative)
|
|
32
|
+
attr_reader :puppetfile_name
|
|
33
|
+
|
|
34
|
+
# Initialize the given environment.
|
|
35
|
+
#
|
|
36
|
+
# @param name [String] The unique name describing this environment.
|
|
37
|
+
# @param basedir [String] The base directory where this environment will be created.
|
|
38
|
+
# @param dirname [String] The directory name for this environment.
|
|
39
|
+
# @param options [Hash] An additional set of options for this environment.
|
|
40
|
+
# The semantics of this environment may depend on the environment implementation.
|
|
41
|
+
def initialize(name, basedir, dirname, options = {})
|
|
42
|
+
@name = name
|
|
43
|
+
@basedir = basedir
|
|
44
|
+
@dirname = dirname
|
|
45
|
+
@options = options
|
|
46
|
+
@puppetfile_name = options[:puppetfile_name]
|
|
47
|
+
|
|
48
|
+
@full_path = File.join(@basedir, @dirname)
|
|
49
|
+
@path = Pathname.new(File.join(@basedir, @dirname))
|
|
50
|
+
|
|
51
|
+
@puppetfile = R10K::Puppetfile.new(@full_path, nil, nil, @puppetfile_name)
|
|
52
|
+
@puppetfile.environment = self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Synchronize the given environment.
|
|
56
|
+
#
|
|
57
|
+
# @api public
|
|
58
|
+
# @abstract
|
|
59
|
+
# @return [void]
|
|
60
|
+
def sync
|
|
61
|
+
raise NotImplementedError, _("%{class} has not implemented method %{method}") % {class: self.class, method: __method__}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Determine the current status of the environment.
|
|
65
|
+
#
|
|
66
|
+
# This can return the following values:
|
|
67
|
+
#
|
|
68
|
+
# * :absent - there is no module installed
|
|
69
|
+
# * :mismatched - there is a module installed but it must be removed and reinstalled
|
|
70
|
+
# * :outdated - the correct module is installed but it needs to be updated
|
|
71
|
+
# * :insync - the correct module is installed and up to date, or the module is actually a boy band.
|
|
72
|
+
#
|
|
73
|
+
# @api public
|
|
74
|
+
# @abstract
|
|
75
|
+
# @return [Symbol]
|
|
76
|
+
def status
|
|
77
|
+
raise NotImplementedError, _("%{class} has not implemented method %{method}") % {class: self.class, method: __method__}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Returns a unique identifier for the environment's current state.
|
|
81
|
+
#
|
|
82
|
+
# @api public
|
|
83
|
+
# @abstract
|
|
84
|
+
# @return [String]
|
|
85
|
+
def signature
|
|
86
|
+
raise NotImplementedError, _("%{class} has not implemented method %{method}") %{class: self.class, method: __method__}
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Returns a hash describing the current state of the environment.
|
|
90
|
+
#
|
|
91
|
+
# @return [Hash]
|
|
92
|
+
def info
|
|
93
|
+
{
|
|
94
|
+
:name => self.name,
|
|
95
|
+
:signature => self.signature,
|
|
96
|
+
}
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# @return [Array<R10K::Module::Base>] All modules defined in the Puppetfile
|
|
100
|
+
# associated with this environment.
|
|
101
|
+
def modules
|
|
102
|
+
@puppetfile.load
|
|
103
|
+
@puppetfile.modules
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def accept(visitor)
|
|
107
|
+
visitor.visit(:environment, self) do
|
|
108
|
+
puppetfile.accept(visitor)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def whitelist(user_whitelist=[])
|
|
113
|
+
user_whitelist.collect { |pattern| File.join(@full_path, pattern) }
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def purge_exclusions
|
|
117
|
+
list = [File.join(@full_path, '.r10k-deploy.json')].to_set
|
|
118
|
+
|
|
119
|
+
list += @puppetfile.managed_directories
|
|
120
|
+
|
|
121
|
+
list += @puppetfile.desired_contents.flat_map do |item|
|
|
122
|
+
desired_tree = []
|
|
123
|
+
|
|
124
|
+
if File.directory?(item)
|
|
125
|
+
desired_tree << File.join(item, '**', '*')
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
Pathname.new(item).ascend do |path|
|
|
129
|
+
break if path.to_s == @full_path
|
|
130
|
+
desired_tree << path.to_s
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
desired_tree
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
list.to_a
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def generate_types!
|
|
140
|
+
argv = [R10K::Settings.puppet_path, 'generate', 'types', '--environment', dirname, '--environmentpath', basedir]
|
|
141
|
+
subproc = R10K::Util::Subprocess.new(argv)
|
|
142
|
+
subproc.raise_on_fail = true
|
|
143
|
+
subproc.logger = logger
|
|
144
|
+
result = subproc.execute
|
|
145
|
+
unless result.stderr.empty?
|
|
146
|
+
logger.warn "There were problems generating types for environment #{dirname}:"
|
|
147
|
+
result.stderr.split(%r{\n}).map { |msg| logger.warn msg }
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|