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,12 @@
|
|
|
1
|
+
test_name "Install PE r10k" do
|
|
2
|
+
|
|
3
|
+
step "Install PE r10k" do
|
|
4
|
+
variant, version, arch, codename = master['platform'].to_array
|
|
5
|
+
if variant == 'ubuntu' && version.split('.').first.to_i >= 18
|
|
6
|
+
on master, "echo 'Acquire::AllowInsecureRepositories \"true\";' > /etc/apt/apt.conf.d/90insecure"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
install_dev_repos_on('pe-r10k', master, ENV['SHA'], '/tmp/repo_configs', {:dev_builds_url => 'http://builds.delivery.puppetlabs.net'})
|
|
10
|
+
master.install_package('pe-r10k')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Ha ha ha! I am in Korean!
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
$git_package = $osfamily ? {
|
|
2
|
+
'Debian' => 'git-core',
|
|
3
|
+
default => 'git'
|
|
4
|
+
}
|
|
5
|
+
class { 'git':
|
|
6
|
+
package_name => $git_package
|
|
7
|
+
}
|
|
8
|
+
->
|
|
9
|
+
git::config { 'user.name':
|
|
10
|
+
value => 'Tester',
|
|
11
|
+
}
|
|
12
|
+
->
|
|
13
|
+
git::config { 'user.email':
|
|
14
|
+
value => 'tester@puppetlabs.com',
|
|
15
|
+
}
|
|
16
|
+
->
|
|
17
|
+
file { '<%= git_repo_path %>':
|
|
18
|
+
ensure => directory
|
|
19
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Execute a git command on a host.
|
|
2
|
+
#
|
|
3
|
+
# ==== Attributes
|
|
4
|
+
#
|
|
5
|
+
# * +host+ - One or more hosts to act upon, or a role (String or Symbol) that identifies one or more hosts.
|
|
6
|
+
# * +git_sub_command+ - The git sub-command to execute including arguments. (The 'git' command is assumed.)
|
|
7
|
+
# * +git_repo_path+ - The path to the git repository on the target host.
|
|
8
|
+
# * +opts+ - Options to alter execution.
|
|
9
|
+
#
|
|
10
|
+
# ==== Returns
|
|
11
|
+
#
|
|
12
|
+
# +nil+
|
|
13
|
+
#
|
|
14
|
+
# ==== Examples
|
|
15
|
+
#
|
|
16
|
+
# git_on(master, 'add file.txt', '~/git_repo')
|
|
17
|
+
def git_on(host, git_sub_command, git_repo_path, opts = {})
|
|
18
|
+
git_command = "git --git-dir=#{git_repo_path}/.git --work-tree=#{git_repo_path} #{git_sub_command}"
|
|
19
|
+
|
|
20
|
+
on(host, git_command, opts)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Add all uncommitted files located in a repository.
|
|
24
|
+
#
|
|
25
|
+
# ==== Attributes
|
|
26
|
+
#
|
|
27
|
+
# * +host+ - One or more hosts to act upon, or a role (String or Symbol) that identifies one or more hosts.
|
|
28
|
+
# * +git_repo_path+ - The path to the git repository on the target host.
|
|
29
|
+
#
|
|
30
|
+
# ==== Returns
|
|
31
|
+
#
|
|
32
|
+
# +nil+
|
|
33
|
+
#
|
|
34
|
+
# ==== Examples
|
|
35
|
+
#
|
|
36
|
+
# git_add_everything(master, '~/git_repo')
|
|
37
|
+
def git_add_everything(host, git_repo_path)
|
|
38
|
+
git_on(host, "add #{git_repo_path}/*", git_repo_path)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Push branch to origin remote.
|
|
42
|
+
#
|
|
43
|
+
# ==== Attributes
|
|
44
|
+
#
|
|
45
|
+
# * +host+ - One or more hosts to act upon, or a role (String or Symbol) that identifies one or more hosts.
|
|
46
|
+
# * +branch+ - The branch to push.
|
|
47
|
+
# * +git_repo_path+ - The path to the git repository on the target host.
|
|
48
|
+
#
|
|
49
|
+
# ==== Returns
|
|
50
|
+
#
|
|
51
|
+
# +nil+
|
|
52
|
+
#
|
|
53
|
+
# ==== Examples
|
|
54
|
+
#
|
|
55
|
+
# git_push(master, 'production', '~/git_repo')
|
|
56
|
+
def git_push(host, branch, git_repo_path)
|
|
57
|
+
git_on(host, "push origin #{branch}", git_repo_path)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Commit changes and push branch to origin remote.
|
|
61
|
+
#
|
|
62
|
+
# ==== Attributes
|
|
63
|
+
#
|
|
64
|
+
# * +host+ - One or more hosts to act upon, or a role (String or Symbol) that identifies one or more hosts.
|
|
65
|
+
# * +branch+ - The branch to push.
|
|
66
|
+
# * +message+ - A single-line commit message. (Don't quote message!)
|
|
67
|
+
# * +git_repo_path+ - The path to the git repository on the target host.
|
|
68
|
+
#
|
|
69
|
+
# ==== Returns
|
|
70
|
+
#
|
|
71
|
+
# +nil+
|
|
72
|
+
#
|
|
73
|
+
# ==== Examples
|
|
74
|
+
#
|
|
75
|
+
# git_commit_push(master, 'production', 'Awesome stuff!', '~/git_repo')
|
|
76
|
+
def git_commit_push(host, branch, message, git_repo_path)
|
|
77
|
+
git_on(host, "commit -m \"#{message}\"", git_repo_path)
|
|
78
|
+
git_push(host, branch, git_repo_path)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Add all uncommitted files located in a repository, commit changes and push branch to origin remote.
|
|
82
|
+
#
|
|
83
|
+
# ==== Attributes
|
|
84
|
+
#
|
|
85
|
+
# * +host+ - One or more hosts to act upon, or a role (String or Symbol) that identifies one or more hosts.
|
|
86
|
+
# * +branch+ - The branch to push.
|
|
87
|
+
# * +message+ - A single-line commit message. (Don't quote message!)
|
|
88
|
+
# * +git_repo_path+ - The path to the git repository on the target host.
|
|
89
|
+
#
|
|
90
|
+
# ==== Returns
|
|
91
|
+
#
|
|
92
|
+
# +nil+
|
|
93
|
+
#
|
|
94
|
+
# ==== Examples
|
|
95
|
+
#
|
|
96
|
+
# git_add_commit_push(master, 'production', 'Awesome stuff!', '~/git_repo')
|
|
97
|
+
def git_add_commit_push(host, branch, message, git_repo_path)
|
|
98
|
+
git_add_everything(host, git_repo_path)
|
|
99
|
+
git_commit_push(host, branch, message, git_repo_path)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Get the last commit SHA.
|
|
103
|
+
#
|
|
104
|
+
# ==== Attributes
|
|
105
|
+
#
|
|
106
|
+
# * +host+ - One or more hosts to act upon, or a role (String or Symbol) that identifies one or more hosts.
|
|
107
|
+
# * +git_repo_path+ - The path to the git repository on the target host.
|
|
108
|
+
#
|
|
109
|
+
# ==== Returns
|
|
110
|
+
#
|
|
111
|
+
# +string+ - The SHA of the last commit.
|
|
112
|
+
#
|
|
113
|
+
# ==== Examples
|
|
114
|
+
#
|
|
115
|
+
# last_commit = git_last_commit(master, '~/git_repo')
|
|
116
|
+
def git_last_commit(host, git_repo_path)
|
|
117
|
+
sha_regex = /commit (\w{40})/
|
|
118
|
+
|
|
119
|
+
return sha_regex.match(git_on(host, 'log', git_repo_path).stdout)[1]
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Hard reset the git repository to a specific commit.
|
|
123
|
+
#
|
|
124
|
+
# ==== Attributes
|
|
125
|
+
#
|
|
126
|
+
# * +host+ - One or more hosts to act upon, or a role (String or Symbol) that identifies one or more hosts.
|
|
127
|
+
# * +commit_sha+ - The reset HEAD to this commit SHA.
|
|
128
|
+
# * +git_repo_path+ - The path to the git repository on the target host.
|
|
129
|
+
#
|
|
130
|
+
# ==== Returns
|
|
131
|
+
#
|
|
132
|
+
# +nil+
|
|
133
|
+
#
|
|
134
|
+
# ==== Examples
|
|
135
|
+
#
|
|
136
|
+
# git_reset_hard(master, 'ff81c01c5', '~/git_repo')
|
|
137
|
+
def git_reset_hard(host, commit_sha, git_repo_path)
|
|
138
|
+
git_on(host, "reset --hard #{commit_sha}", git_repo_path)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Create a bare Git repository.
|
|
142
|
+
#
|
|
143
|
+
# ==== Attributes
|
|
144
|
+
#
|
|
145
|
+
# * +host+ - The Puppet host on which to create a bare git repo.
|
|
146
|
+
# * +git_repo_parent_path+ - The parent path that contains the desired Git repository.
|
|
147
|
+
# * +git_repo_name+ - The name of the repository.
|
|
148
|
+
#
|
|
149
|
+
# ==== Returns
|
|
150
|
+
#
|
|
151
|
+
# +string+ - The path to the newly created Git repository.
|
|
152
|
+
#
|
|
153
|
+
# ==== Examples
|
|
154
|
+
#
|
|
155
|
+
# git_init_bare_repo(master, '/git/repos', 'environments')
|
|
156
|
+
def git_init_bare_repo(host, git_repo_parent_path, git_repo_name)
|
|
157
|
+
#Init
|
|
158
|
+
git_repo_path = File.join(git_repo_parent_path, "#{git_repo_name}.git")
|
|
159
|
+
|
|
160
|
+
#Initialize bare Git repository
|
|
161
|
+
on(host, "mkdir -p #{git_repo_path}")
|
|
162
|
+
on(host, "git init --bare #{git_repo_path}")
|
|
163
|
+
|
|
164
|
+
return git_repo_path
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Clone a Git repository.
|
|
168
|
+
#
|
|
169
|
+
# ==== Attributes
|
|
170
|
+
#
|
|
171
|
+
# * +host+ - The Puppet host on which to create a bare git repo.
|
|
172
|
+
# * +git_clone_path+ - The destination path for the git clone.
|
|
173
|
+
# * +git_source+ - The origin from which to clone.
|
|
174
|
+
#
|
|
175
|
+
# ==== Returns
|
|
176
|
+
#
|
|
177
|
+
# +nil+
|
|
178
|
+
#
|
|
179
|
+
# ==== Examples
|
|
180
|
+
#
|
|
181
|
+
# git_clone_repo(master, '~/repos/r10k', '/git/repos/environments.git')
|
|
182
|
+
def git_clone_repo(host, git_clone_path, git_source)
|
|
183
|
+
on(host, "git clone #{git_source} #{git_clone_path}")
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Create a bare Git repository and then clone the repository.
|
|
187
|
+
#
|
|
188
|
+
# ==== Attributes
|
|
189
|
+
#
|
|
190
|
+
# * +host+ - The Puppet host on which to create a bare git repo.
|
|
191
|
+
# * +git_repo_parent_path+ - The parent path that contains the desired Git repository.
|
|
192
|
+
# * +git_repo_name+ - The name of the repository.
|
|
193
|
+
# * +git_clone_path+ - The destination path for the git clone.
|
|
194
|
+
#
|
|
195
|
+
# ==== Returns
|
|
196
|
+
#
|
|
197
|
+
# +string+ - The path to the newly created Git repository.
|
|
198
|
+
#
|
|
199
|
+
# ==== Examples
|
|
200
|
+
#
|
|
201
|
+
# git_init_bare_repo_and_clone(master, '/git/repos', 'environments', '~/repos/r10k')
|
|
202
|
+
def git_init_bare_repo_and_clone(host, git_repo_parent_path, git_repo_name, git_clone_path)
|
|
203
|
+
origin_git_repo_path = git_init_bare_repo(host, git_repo_parent_path, git_repo_name)
|
|
204
|
+
git_clone_repo(host, git_clone_path, origin_git_repo_path)
|
|
205
|
+
end
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Create a "site.pp" file with file bucket enabled. Also, allow
|
|
2
|
+
# the creation of a custom node definition or use the 'default'
|
|
3
|
+
# node definition.
|
|
4
|
+
#
|
|
5
|
+
# ==== Attributes
|
|
6
|
+
#
|
|
7
|
+
# * +master_certname+ - Certificate name of Puppet master.
|
|
8
|
+
# * +manifest+ - A Puppet manifest to inject into the node definition.
|
|
9
|
+
# * +node_def_name+ - A node definition pattern or name.
|
|
10
|
+
#
|
|
11
|
+
# ==== Returns
|
|
12
|
+
#
|
|
13
|
+
# +string+ - A combined manifest with node definition containing input manifest
|
|
14
|
+
#
|
|
15
|
+
# ==== Examples
|
|
16
|
+
#
|
|
17
|
+
# site_pp = create_site_pp("puppetmaster", '', node_def_name='agent')
|
|
18
|
+
def create_site_pp(master_certname, manifest='', node_def_name='default')
|
|
19
|
+
default_def = <<-MANIFEST
|
|
20
|
+
node default {
|
|
21
|
+
}
|
|
22
|
+
MANIFEST
|
|
23
|
+
|
|
24
|
+
node_def = <<-MANIFEST
|
|
25
|
+
node #{node_def_name} {
|
|
26
|
+
|
|
27
|
+
#{manifest}
|
|
28
|
+
}
|
|
29
|
+
MANIFEST
|
|
30
|
+
|
|
31
|
+
if node_def_name != 'default'
|
|
32
|
+
node_def = "#{default_def}\n#{node_def}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
site_pp = <<-MANIFEST
|
|
36
|
+
filebucket { 'main':
|
|
37
|
+
server => '#{master_certname}',
|
|
38
|
+
path => false,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
File { backup => 'main' }
|
|
42
|
+
|
|
43
|
+
#{node_def}
|
|
44
|
+
MANIFEST
|
|
45
|
+
|
|
46
|
+
return site_pp
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Read a Puppet manifest file and inject the content into a
|
|
50
|
+
# "default" node definition. (Used mostly to overide site.pp)
|
|
51
|
+
#
|
|
52
|
+
# ==== Attributes
|
|
53
|
+
#
|
|
54
|
+
# * +manifest_path+ - The file path to target manifest.
|
|
55
|
+
# * +master_certname+ - Certificate name of Puppet master.
|
|
56
|
+
#
|
|
57
|
+
# ==== Returns
|
|
58
|
+
#
|
|
59
|
+
# +string+ - A combined manifest with node definition containg input manifest
|
|
60
|
+
#
|
|
61
|
+
# ==== Examples
|
|
62
|
+
#
|
|
63
|
+
# site_pp = create_node_manifest("/tmp/test.pp", "master")
|
|
64
|
+
def create_node_manifest(manifest_path, master_certname, node_def_name='default')
|
|
65
|
+
manifest = File.read(manifest_path)
|
|
66
|
+
|
|
67
|
+
site_pp = <<-MANIFEST
|
|
68
|
+
filebucket { 'main':
|
|
69
|
+
server => '#{master_certname}',
|
|
70
|
+
path => false,
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
File { backup => 'main' }
|
|
74
|
+
|
|
75
|
+
node default {
|
|
76
|
+
|
|
77
|
+
#{manifest}
|
|
78
|
+
}
|
|
79
|
+
MANIFEST
|
|
80
|
+
|
|
81
|
+
return site_pp
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Set mode, owner and group on a remote path.
|
|
85
|
+
#
|
|
86
|
+
# ==== Attributes
|
|
87
|
+
#
|
|
88
|
+
# * +host+ - The remote host containing the target path.
|
|
89
|
+
# * +path+ - The path to set mode, user and group upon.
|
|
90
|
+
# * +mode+ - The desired mode to set on the path in as a string.
|
|
91
|
+
# * +owner+ - The owner to set on the path. (Puppet user if not specified.)
|
|
92
|
+
# * +group+ - The group to set on the path. (Puppet group if not specified.)
|
|
93
|
+
#
|
|
94
|
+
# ==== Returns
|
|
95
|
+
#
|
|
96
|
+
# nil
|
|
97
|
+
#
|
|
98
|
+
# ==== Examples
|
|
99
|
+
#
|
|
100
|
+
# set_perms_on_remote(master, "/tmp/test/site.pp", "777")
|
|
101
|
+
def set_perms_on_remote(host, path, mode, owner=nil, group=nil)
|
|
102
|
+
if (owner.nil?)
|
|
103
|
+
owner = on(host, puppet('config', 'print', 'user')).stdout.rstrip
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
if (group.nil?)
|
|
107
|
+
group = on(host, puppet('config', 'print', 'group')).stdout.rstrip
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
on(host, "chmod -R #{mode} #{path}")
|
|
111
|
+
on(host, "chown -R #{owner}:#{group} #{path}")
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Inject temporary "site.pp" onto target host. This will also create
|
|
115
|
+
# a "modules" folder in the target remote directory.
|
|
116
|
+
#
|
|
117
|
+
# ==== Attributes
|
|
118
|
+
#
|
|
119
|
+
# * +master+ - The target master for injection.
|
|
120
|
+
# * +site_pp_path+ - A path on the remote host into which the site.pp will be injected.
|
|
121
|
+
# * +manifest+ - The manifest content to inject into "site.pp" to the host target path.
|
|
122
|
+
#
|
|
123
|
+
# ==== Returns
|
|
124
|
+
#
|
|
125
|
+
# nil
|
|
126
|
+
#
|
|
127
|
+
# ==== Examples
|
|
128
|
+
#
|
|
129
|
+
# site_pp = inject_site_pp(master, "/tmp/test/site.pp", manifest)
|
|
130
|
+
def inject_site_pp(master, site_pp_path, manifest)
|
|
131
|
+
site_pp_dir = File.dirname(site_pp_path)
|
|
132
|
+
create_remote_file(master, site_pp_path, manifest)
|
|
133
|
+
|
|
134
|
+
set_perms_on_remote(master, site_pp_dir, "777")
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Create a temporary directory environment and inject a "site.pp" for the target environment.
|
|
138
|
+
#
|
|
139
|
+
# ==== Attributes
|
|
140
|
+
#
|
|
141
|
+
# * +master+ - The master on which to create a new Puppet environment.
|
|
142
|
+
# * +env_root_path+ - The base path on the master that contains all environments.
|
|
143
|
+
# * +env_seed_name+ - The seed name to use for generating an environment name.
|
|
144
|
+
# * +manifest+ - The manifest content to inject into "site.pp" of the newly created environment.
|
|
145
|
+
#
|
|
146
|
+
# ==== Returns
|
|
147
|
+
#
|
|
148
|
+
# +string+ - The environment name that was generated.
|
|
149
|
+
#
|
|
150
|
+
# ==== Examples
|
|
151
|
+
#
|
|
152
|
+
# temp_env_name = create_temp_dir_env(master, "/tmp/test/site.pp", "stuff", manifest)
|
|
153
|
+
def create_temp_dir_env(master, env_root_path, env_seed_name, manifest)
|
|
154
|
+
env_name = "#{env_seed_name}" + rand(36**16).to_s(36)
|
|
155
|
+
env_path = "#{env_root_path}/#{env_name}"
|
|
156
|
+
env_site_pp_path = "#{env_path}/manifests/site.pp"
|
|
157
|
+
|
|
158
|
+
on(master, "mkdir -p #{env_path}/manifests #{env_path}/modules")
|
|
159
|
+
set_perms_on_remote(master, env_path, "777")
|
|
160
|
+
|
|
161
|
+
inject_site_pp(master, env_site_pp_path, manifest)
|
|
162
|
+
|
|
163
|
+
return env_name
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Restart the puppet server and wait for it to come back up
|
|
167
|
+
# ==== Attributes
|
|
168
|
+
# *+host+ - the host that this should operate on
|
|
169
|
+
# *+opts+ - an options hash - not required
|
|
170
|
+
# *+:timeout+ - the amount of time in seconds to wait for success
|
|
171
|
+
# *+:frequency+ - The time to wait between retries
|
|
172
|
+
#
|
|
173
|
+
# Raises a standard error if the wait is uncessfull
|
|
174
|
+
#
|
|
175
|
+
# ==== Example
|
|
176
|
+
# restart_puppet_server(master)
|
|
177
|
+
# restart_puppet_server(master, {:time_out => 200, :frequency => 10})
|
|
178
|
+
def restart_puppet_server(host, opts = {})
|
|
179
|
+
|
|
180
|
+
on(host, "puppet resource service pe-puppetserver ensure=stopped")
|
|
181
|
+
on(host, "puppet resource service pe-puppetserver ensure=running")
|
|
182
|
+
masterHostName = on(host, "hostname").stdout.chomp
|
|
183
|
+
opts[:time_out] ||= 100
|
|
184
|
+
opts[:frequency] ||= 5
|
|
185
|
+
i = 0
|
|
186
|
+
|
|
187
|
+
# -k to ignore HTTPS error that isn't relevant to us
|
|
188
|
+
curl_call = "-I -k https://#{masterHostName}:8140/production/certificate_statuses/all"
|
|
189
|
+
|
|
190
|
+
while i < opts[:time_out] do
|
|
191
|
+
sleep opts[:frequency]
|
|
192
|
+
i += 1
|
|
193
|
+
exit_code = curl_on(host, curl_call, :acceptable_exit_codes => [0,1,7]).exit_code
|
|
194
|
+
|
|
195
|
+
# Exit code 7 is "connection refused"
|
|
196
|
+
if exit_code != '7'
|
|
197
|
+
sleep 20
|
|
198
|
+
puts 'Restarting the Puppet Server was successful!'
|
|
199
|
+
return
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
raise StandardError, 'Attempting to restart the puppet server was not successful in the time alloted.'
|
|
204
|
+
|
|
205
|
+
end
|