puppet 3.5.1-x86-mingw32 → 3.6.0.rc1-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CONTRIBUTING.md +5 -0
- data/Gemfile +17 -9
- data/README.md +1 -0
- data/conf/fileserver.conf +4 -3
- data/ext/README.environment +8 -0
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/control +2 -2
- data/ext/debian/puppet-common.dirs +4 -0
- data/ext/debian/rules +4 -0
- data/ext/emacs/puppet-mode-init.el +1 -1
- data/ext/emacs/puppet-mode.el +36 -17
- data/ext/redhat/client.init +3 -3
- data/ext/redhat/puppet.spec.erb +9 -0
- data/ext/systemd/puppet.service +3 -4
- data/ext/systemd/puppetmaster.service +1 -3
- data/install.rb +1 -1
- data/lib/puppet.rb +2 -1
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application.rb +17 -17
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/configurer.rb +4 -1
- data/lib/puppet/configurer/downloader.rb +13 -12
- data/lib/puppet/configurer/plugin_handler.rb +3 -3
- data/lib/puppet/context.rb +6 -1
- data/lib/puppet/defaults.rb +82 -12
- data/lib/puppet/environments.rb +169 -13
- data/lib/puppet/external/nagios/grammar.ry +2 -0
- data/lib/puppet/external/nagios/parser.rb +28 -19
- data/lib/puppet/face/config.rb +19 -6
- data/lib/puppet/face/module/generate.rb +209 -7
- data/lib/puppet/face/module/install.rb +17 -16
- data/lib/puppet/face/module/list.rb +83 -82
- data/lib/puppet/face/module/search.rb +1 -1
- data/lib/puppet/face/module/upgrade.rb +10 -9
- data/lib/puppet/face/parser.rb +3 -2
- data/lib/puppet/face/plugin.rb +8 -4
- data/lib/puppet/file_bucket/dipper.rb +6 -3
- data/lib/puppet/file_bucket/file.rb +4 -2
- data/lib/puppet/file_serving/metadata.rb +1 -1
- data/lib/puppet/file_system/memory_file.rb +27 -1
- data/lib/puppet/file_system/memory_impl.rb +15 -1
- data/lib/puppet/forge.rb +148 -52
- data/lib/puppet/forge/cache.rb +5 -1
- data/lib/puppet/forge/errors.rb +10 -0
- data/lib/puppet/forge/repository.rb +61 -26
- data/lib/puppet/functions.rb +548 -0
- data/lib/puppet/functions/assert_type.rb +42 -0
- data/lib/puppet/functions/import.rb +7 -0
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +3 -2
- data/lib/puppet/indirector/rest.rb +18 -0
- data/lib/puppet/loaders.rb +20 -0
- data/lib/puppet/module.rb +2 -2
- data/lib/puppet/module_tool.rb +40 -14
- data/lib/puppet/module_tool/applications.rb +0 -1
- data/lib/puppet/module_tool/applications/application.rb +35 -26
- data/lib/puppet/module_tool/applications/builder.rb +16 -6
- data/lib/puppet/module_tool/applications/checksummer.rb +25 -19
- data/lib/puppet/module_tool/applications/installer.rb +196 -35
- data/lib/puppet/module_tool/applications/searcher.rb +1 -0
- data/lib/puppet/module_tool/applications/uninstaller.rb +7 -1
- data/lib/puppet/module_tool/applications/unpacker.rb +57 -31
- data/lib/puppet/module_tool/applications/upgrader.rb +221 -65
- data/lib/puppet/module_tool/checksums.rb +5 -8
- data/lib/puppet/module_tool/errors/installer.rb +12 -44
- data/lib/puppet/module_tool/errors/shared.rb +84 -11
- data/lib/puppet/module_tool/errors/upgrader.rb +16 -45
- data/lib/puppet/module_tool/install_directory.rb +7 -6
- data/lib/puppet/module_tool/installed_modules.rb +92 -0
- data/lib/puppet/module_tool/local_tarball.rb +91 -0
- data/lib/puppet/module_tool/metadata.rb +119 -115
- data/lib/puppet/module_tool/modulefile.rb +9 -9
- data/lib/puppet/module_tool/shared_behaviors.rb +19 -7
- data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +79 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +18 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +1 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +7 -0
- data/lib/puppet/module_tool/tar.rb +3 -7
- data/lib/puppet/module_tool/tar/gnu.rb +21 -9
- data/lib/puppet/module_tool/tar/mini.rb +2 -8
- data/lib/puppet/network/http/api/v1.rb +1 -1
- data/lib/puppet/network/http/api/v2/authorization.rb +4 -2
- data/lib/puppet/network/http/issues.rb +1 -0
- data/lib/puppet/network/http_pool.rb +15 -6
- data/lib/puppet/node/environment.rb +91 -20
- data/lib/puppet/parser/ast/pops_bridge.rb +44 -3
- data/lib/puppet/parser/collector.rb +1 -1
- data/lib/puppet/parser/compiler.rb +50 -7
- data/lib/puppet/parser/functions.rb +6 -0
- data/lib/puppet/parser/functions/generate.rb +1 -1
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/pops.rb +22 -1
- data/lib/puppet/pops/adapters.rb +8 -1
- data/lib/puppet/pops/binder/bindings_composer.rb +1 -1
- data/lib/puppet/pops/binder/bindings_factory.rb +1 -1
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +1 -1
- data/lib/puppet/pops/binder/producers.rb +2 -2
- data/lib/puppet/pops/evaluator/access_operator.rb +65 -25
- data/lib/puppet/pops/evaluator/callable_signature.rb +101 -0
- data/lib/puppet/pops/evaluator/closure.rb +57 -2
- data/lib/puppet/pops/evaluator/compare_operator.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +9 -11
- data/lib/puppet/pops/evaluator/runtime3_support.rb +72 -21
- data/lib/puppet/pops/functions/dispatch.rb +71 -0
- data/lib/puppet/pops/functions/dispatcher.rb +237 -0
- data/lib/puppet/pops/functions/function.rb +77 -0
- data/lib/puppet/pops/issues.rb +12 -0
- data/lib/puppet/pops/loader/base_loader.rb +102 -0
- data/lib/puppet/pops/loader/dependency_loader.rb +60 -0
- data/lib/puppet/pops/loader/gem_support.rb +49 -0
- data/lib/puppet/pops/loader/loader.rb +180 -0
- data/lib/puppet/pops/loader/loader_paths.rb +137 -0
- data/lib/puppet/pops/loader/module_loaders.rb +242 -0
- data/lib/puppet/pops/loader/null_loader.rb +44 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +34 -0
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +109 -0
- data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
- data/lib/puppet/pops/loader/static_loader.rb +69 -0
- data/lib/puppet/pops/loader/uri_helper.rb +22 -0
- data/lib/puppet/pops/loaders.rb +240 -0
- data/lib/puppet/pops/model/factory.rb +13 -5
- data/lib/puppet/pops/model/model_tree_dumper.rb +12 -4
- data/lib/puppet/pops/parser/egrammar.ra +31 -18
- data/lib/puppet/pops/parser/eparser.rb +1137 -1106
- data/lib/puppet/pops/parser/lexer2.rb +17 -16
- data/lib/puppet/pops/semantic_error.rb +17 -0
- data/lib/puppet/pops/types/type_calculator.rb +150 -15
- data/lib/puppet/pops/types/type_factory.rb +69 -0
- data/lib/puppet/pops/types/type_parser.rb +9 -0
- data/lib/puppet/pops/types/types.rb +65 -4
- data/lib/puppet/pops/validation/checker4_0.rb +1 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -1
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +2 -2
- data/lib/puppet/provider/cron/crontab.rb +13 -2
- data/lib/puppet/provider/package.rb +24 -0
- data/lib/puppet/provider/package/apt.rb +6 -1
- data/lib/puppet/provider/package/gem.rb +8 -2
- data/lib/puppet/provider/package/msi.rb +0 -15
- data/lib/puppet/provider/package/openbsd.rb +0 -24
- data/lib/puppet/provider/package/rpm.rb +3 -29
- data/lib/puppet/provider/package/windows.rb +0 -15
- data/lib/puppet/provider/package/yum.rb +101 -24
- data/lib/puppet/provider/package/yumhelper.py +31 -1
- data/lib/puppet/provider/package/zypper.rb +10 -28
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/init.rb +3 -0
- data/lib/puppet/provider/service/openbsd.rb +318 -0
- data/lib/puppet/provider/service/redhat.rb +6 -3
- data/lib/puppet/provider/service/systemd.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +115 -42
- data/lib/puppet/resource.rb +13 -9
- data/lib/puppet/resource/catalog.rb +12 -6
- data/lib/puppet/resource/type_collection.rb +3 -3
- data/lib/puppet/settings.rb +57 -36
- data/lib/puppet/settings/config_file.rb +5 -0
- data/lib/puppet/settings/environment_conf.rb +147 -0
- data/lib/puppet/settings/ttl_setting.rb +48 -0
- data/lib/puppet/ssl/certificate_authority.rb +2 -3
- data/lib/puppet/ssl/certificate_authority/autosign_command.rb +1 -1
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/validator/default_validator.rb +2 -2
- data/lib/puppet/status.rb +1 -1
- data/lib/puppet/test/test_helper.rb +1 -0
- data/lib/puppet/type/augeas.rb +13 -1
- data/lib/puppet/type/cron.rb +32 -18
- data/lib/puppet/type/file.rb +4 -2
- data/lib/puppet/type/file/checksum.rb +15 -5
- data/lib/puppet/type/file/content.rb +3 -1
- data/lib/puppet/type/file/source.rb +5 -5
- data/lib/puppet/type/package.rb +12 -17
- data/lib/puppet/type/resources.rb +3 -1
- data/lib/puppet/type/scheduled_task.rb +4 -5
- data/lib/puppet/type/service.rb +12 -2
- data/lib/puppet/type/user.rb +106 -0
- data/lib/puppet/type/yumrepo.rb +9 -1
- data/lib/puppet/util/checksums.rb +60 -1
- data/lib/puppet/util/diff.rb +3 -1
- data/lib/puppet/util/execution.rb +20 -16
- data/lib/puppet/util/feature.rb +3 -0
- data/lib/puppet/util/logging.rb +19 -12
- data/lib/puppet/util/rubygems.rb +10 -0
- data/lib/puppet/util/watched_file.rb +1 -1
- data/lib/puppet/util/windows/security.rb +5 -3
- data/lib/puppet/vendor/load_semantic.rb +1 -0
- data/lib/puppet/vendor/require_vendored.rb +2 -0
- data/lib/puppet/vendor/semantic/Gemfile +20 -0
- data/lib/puppet/vendor/semantic/Rakefile +69 -0
- data/lib/puppet/vendor/semantic/lib/semantic.rb +7 -0
- data/lib/puppet/vendor/semantic/lib/semantic/dependency.rb +181 -0
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/graph.rb +60 -0
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/graph_node.rb +117 -0
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +46 -0
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/source.rb +25 -0
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/unsatisfiable_graph.rb +31 -0
- data/lib/puppet/vendor/semantic/lib/semantic/version.rb +168 -0
- data/lib/puppet/vendor/semantic/lib/semantic/version_range.rb +424 -0
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +24 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +141 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +162 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +143 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +5 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +44 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +383 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +307 -0
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +608 -0
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/java.tgz +0 -0
- data/spec/fixtures/stdlib.tgz +0 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/usee/lib/puppet/functions/usee/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/user/lib/puppet/functions/user/caller.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/user/metadata.json +9 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/lib/puppet/functions/modulea/rb_func_a.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/lib/puppet/functions/rb_func_a.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/manifests/init.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +19 -0
- data/spec/fixtures/unit/pops/loaders/loaders/wo_metadata_module/modules/moduleb/lib/puppet/functions/moduleb/rb_func_b.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/wo_metadata_module/modules/moduleb/manifests/init.pp +3 -0
- data/spec/fixtures/unit/provider/naginator/define_empty_param +6 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +7 -0
- data/spec/fixtures/unit/type/user/authorized_keys +5 -0
- data/spec/integration/application/apply_spec.rb +1 -2
- data/spec/integration/configurer_spec.rb +2 -2
- data/spec/integration/faces/plugin_spec.rb +62 -0
- data/spec/integration/indirector/catalog/compiler_spec.rb +1 -1
- data/spec/integration/indirector/catalog/queue_spec.rb +1 -1
- data/spec/integration/node/environment_spec.rb +2 -2
- data/spec/integration/parser/future_compiler_spec.rb +96 -142
- data/spec/integration/parser/ruby_manifest_spec.rb +0 -5
- data/spec/integration/provider/cron/crontab_spec.rb +35 -0
- data/spec/integration/type/file_spec.rb +74 -72
- data/spec/integration/util/windows/security_spec.rb +17 -0
- data/spec/lib/matchers/resource.rb +45 -13
- data/spec/lib/puppet_spec/files.rb +18 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +56 -0
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +133 -0
- data/spec/shared_contexts/checksums.rb +55 -0
- data/spec/unit/application/apply_spec.rb +10 -7
- data/spec/unit/application/doc_spec.rb +17 -10
- data/spec/unit/application/indirection_base_spec.rb +18 -10
- data/spec/unit/application/inspect_spec.rb +22 -20
- data/spec/unit/configurer/downloader_spec.rb +7 -6
- data/spec/unit/configurer/plugin_handler_spec.rb +5 -8
- data/spec/unit/configurer_spec.rb +1 -1
- data/spec/unit/context_spec.rb +23 -0
- data/spec/unit/environments_spec.rb +274 -16
- data/spec/unit/face/config_spec.rb +111 -11
- data/spec/unit/face/module/install_spec.rb +14 -85
- data/spec/unit/face/module/list_spec.rb +108 -62
- data/spec/unit/face/module/search_spec.rb +1 -1
- data/spec/unit/face/module/uninstall_spec.rb +21 -42
- data/spec/unit/face/parser_spec.rb +5 -2
- data/spec/unit/file_bucket/dipper_spec.rb +92 -86
- data/spec/unit/file_bucket/file_spec.rb +23 -75
- data/spec/unit/file_serving/metadata_spec.rb +74 -74
- data/spec/unit/forge/module_release_spec.rb +131 -0
- data/spec/unit/forge/repository_spec.rb +21 -20
- data/spec/unit/forge_spec.rb +99 -23
- data/spec/unit/functions/assert_type_spec.rb +59 -0
- data/spec/unit/functions4_spec.rb +671 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +2 -2
- data/spec/unit/indirector/facts/facter_spec.rb +9 -3
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +156 -155
- data/spec/unit/indirector/rest_spec.rb +8 -0
- data/spec/unit/interface/face_collection_spec.rb +35 -23
- data/spec/unit/module_spec.rb +20 -8
- data/spec/unit/module_tool/applications/builder_spec.rb +40 -12
- data/spec/unit/module_tool/applications/checksummer_spec.rb +86 -105
- data/spec/unit/module_tool/applications/installer_spec.rb +293 -261
- data/spec/unit/module_tool/applications/searcher_spec.rb +1 -1
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +90 -154
- data/spec/unit/module_tool/applications/unpacker_spec.rb +12 -12
- data/spec/unit/module_tool/applications/upgrader_spec.rb +286 -18
- data/spec/unit/module_tool/metadata_spec.rb +223 -14
- data/spec/unit/module_tool/tar/gnu_spec.rb +12 -9
- data/spec/unit/module_tool/tar/mini_spec.rb +1 -1
- data/spec/unit/module_tool/tar_spec.rb +4 -18
- data/spec/unit/module_tool_spec.rb +123 -27
- data/spec/unit/network/formats_spec.rb +2 -2
- data/spec/unit/network/http_pool_spec.rb +21 -0
- data/spec/unit/network/rights_spec.rb +10 -8
- data/spec/unit/node/environment_spec.rb +27 -2
- data/spec/unit/parser/collector_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +1 -1
- data/spec/unit/parser/functions/generate_spec.rb +4 -0
- data/spec/unit/pops/evaluator/access_ops_spec.rb +50 -11
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +25 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +44 -0
- data/spec/unit/pops/loaders/loader_paths_spec.rb +66 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +105 -0
- data/spec/unit/pops/loaders/module_loaders_spec.rb +119 -0
- data/spec/unit/pops/loaders/static_loader_spec.rb +46 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +145 -10
- data/spec/unit/pops/types/type_factory_spec.rb +101 -0
- data/spec/unit/pops/types/type_parser_spec.rb +22 -0
- data/spec/unit/property/list_spec.rb +9 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +58 -11
- data/spec/unit/provider/cron/crontab_spec.rb +1 -0
- data/spec/unit/provider/cron/parsed_spec.rb +15 -0
- data/spec/unit/provider/naginator_spec.rb +14 -0
- data/spec/unit/provider/package/apt_spec.rb +78 -64
- data/spec/unit/provider/package/gem_spec.rb +15 -0
- data/spec/unit/provider/package/rpm_spec.rb +6 -6
- data/spec/unit/provider/package/windows_spec.rb +1 -1
- data/spec/unit/provider/package/yum_spec.rb +199 -104
- data/spec/unit/provider/package/zypper_spec.rb +41 -15
- data/spec/unit/provider/service/openbsd_spec.rb +129 -22
- data/spec/unit/provider/service/redhat_spec.rb +18 -4
- data/spec/unit/provider/service/systemd_spec.rb +5 -9
- data/spec/unit/provider/service/upstart_spec.rb +1 -1
- data/spec/unit/provider/user/directoryservice_spec.rb +10 -0
- data/spec/unit/provider/yumrepo/inifile_spec.rb +171 -15
- data/spec/unit/resource/catalog_spec.rb +20 -104
- data/spec/unit/resource/type_collection_spec.rb +10 -9
- data/spec/unit/settings/config_file_spec.rb +29 -6
- data/spec/unit/settings/environment_conf_spec.rb +51 -0
- data/spec/unit/settings_spec.rb +97 -12
- data/spec/unit/ssl/certificate_authority_spec.rb +2 -0
- data/spec/unit/type/augeas_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +6 -7
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/content_spec.rb +277 -207
- data/spec/unit/type/file_spec.rb +9 -7
- data/spec/unit/type/user_spec.rb +106 -18
- data/spec/unit/type/yumrepo_spec.rb +8 -0
- data/spec/unit/util/checksums_spec.rb +12 -5
- data/spec/unit/util/diff_spec.rb +8 -0
- data/spec/unit/util/execution_spec.rb +4 -4
- data/spec/unit/util/feature_spec.rb +2 -0
- data/spec/unit/util/logging_spec.rb +14 -4
- data/spec/unit/util/rdoc/parser_spec.rb +5 -4
- data/spec/unit/util/rubygems_spec.rb +14 -0
- data/tasks/parallel.rake +2 -2
- metadata +154 -21
- checksums.yaml +0 -7
- data/lib/puppet/module_tool/applications/generator.rb +0 -142
- data/lib/puppet/module_tool/skeleton.rb +0 -37
- data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +0 -11
- data/lib/puppet/module_tool/skeleton/templates/generator/README.erb +0 -16
- data/lib/puppet/module_tool/tar/solaris.rb +0 -5
- data/spec/fixtures/unit/provider/service/systemd/list_units_services +0 -17
- data/spec/unit/module_tool/tar/solaris_spec.rb +0 -22
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'tmpdir'
|
3
|
+
|
4
|
+
require 'puppet/forge'
|
5
|
+
require 'puppet/module_tool'
|
6
|
+
|
7
|
+
module Puppet::ModuleTool
|
8
|
+
class LocalTarball < Semantic::Dependency::Source
|
9
|
+
attr_accessor :release
|
10
|
+
|
11
|
+
def initialize(filename)
|
12
|
+
unpack(filename, tmpdir)
|
13
|
+
Puppet.debug "Unpacked local tarball to #{tmpdir}"
|
14
|
+
|
15
|
+
mod = Puppet::Module.new('tarball', tmpdir, nil)
|
16
|
+
@release = ModuleRelease.new(self, mod)
|
17
|
+
end
|
18
|
+
|
19
|
+
def fetch(name)
|
20
|
+
if @release.name == name
|
21
|
+
[ @release ]
|
22
|
+
else
|
23
|
+
[ ]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def prepare(release)
|
28
|
+
release.mod.path
|
29
|
+
end
|
30
|
+
|
31
|
+
def install(release, dir)
|
32
|
+
staging_dir = release.prepare
|
33
|
+
|
34
|
+
module_dir = dir + release.name[/-(.*)/, 1]
|
35
|
+
module_dir.rmtree if module_dir.exist?
|
36
|
+
|
37
|
+
# Make sure unpacked module has the same ownership as the folder we are moving it into.
|
38
|
+
Puppet::ModuleTool::Applications::Unpacker.harmonize_ownership(dir, staging_dir)
|
39
|
+
|
40
|
+
FileUtils.mv(staging_dir, module_dir)
|
41
|
+
end
|
42
|
+
|
43
|
+
class ModuleRelease < Semantic::Dependency::ModuleRelease
|
44
|
+
attr_reader :mod, :install_dir, :metadata
|
45
|
+
|
46
|
+
def initialize(source, mod)
|
47
|
+
@mod = mod
|
48
|
+
@metadata = mod.metadata
|
49
|
+
name = mod.forge_name.tr('/', '-')
|
50
|
+
version = Semantic::Version.parse(mod.version)
|
51
|
+
|
52
|
+
if mod.dependencies
|
53
|
+
dependencies = mod.dependencies.map do |dep|
|
54
|
+
range = dep['version_requirement'] || dep['versionRequirement'] || '>=0'
|
55
|
+
range = Semantic::VersionRange.parse(range) rescue Semantic::VersionRange::EMPTY_RANGE
|
56
|
+
[ dep['name'].tr('/', '-'), range ]
|
57
|
+
end
|
58
|
+
dependencies = Hash[dependencies]
|
59
|
+
end
|
60
|
+
|
61
|
+
super(source, name, version, dependencies || {})
|
62
|
+
end
|
63
|
+
|
64
|
+
def install(dir)
|
65
|
+
@source.install(self, dir)
|
66
|
+
@install_dir = dir
|
67
|
+
end
|
68
|
+
|
69
|
+
def prepare
|
70
|
+
@source.prepare(self)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
# Obtain a suitable temporary path for unpacking tarballs
|
77
|
+
#
|
78
|
+
# @return [String] path to temporary unpacking location
|
79
|
+
def tmpdir
|
80
|
+
@dir ||= Dir.mktmpdir('local-tarball', Puppet::Forge::Cache.base_path)
|
81
|
+
end
|
82
|
+
|
83
|
+
def unpack(file, destination)
|
84
|
+
begin
|
85
|
+
Puppet::ModuleTool::Applications::Unpacker.unpack(file, destination)
|
86
|
+
rescue Puppet::ExecutionFailure => e
|
87
|
+
raise RuntimeError, "Could not extract contents of module archive: #{e.message}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -1,155 +1,159 @@
|
|
1
1
|
require 'puppet/util/methodhelper'
|
2
2
|
require 'puppet/module_tool'
|
3
3
|
require 'puppet/network/format_support'
|
4
|
+
require 'uri'
|
5
|
+
require 'json'
|
4
6
|
|
5
7
|
module Puppet::ModuleTool
|
6
|
-
|
7
|
-
#
|
8
|
+
|
8
9
|
# This class provides a data structure representing a module's metadata.
|
9
|
-
#
|
10
|
-
# +annotate+ methods in other classes.
|
10
|
+
# @api private
|
11
11
|
class Metadata
|
12
|
-
include Puppet::Util::MethodHelper
|
13
12
|
include Puppet::Network::FormatSupport
|
14
13
|
|
15
|
-
|
16
|
-
# +username+ and module +name+.
|
17
|
-
attr_reader :full_module_name
|
18
|
-
|
19
|
-
# The name of the user that owns this module.
|
20
|
-
attr_reader :username
|
21
|
-
|
22
|
-
# The name of this module. See also +full_module_name+.
|
23
|
-
attr_reader :name
|
14
|
+
attr_accessor :module_name
|
24
15
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
@full_module_name = full_module_name
|
37
|
-
@username, @name = Puppet::ModuleTool::username_and_modname_from(full_module_name)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Return an array of the module's Dependency objects.
|
41
|
-
def dependencies
|
42
|
-
return @dependencies ||= []
|
43
|
-
end
|
44
|
-
|
45
|
-
def author
|
46
|
-
@author || @username
|
47
|
-
end
|
48
|
-
|
49
|
-
def author=(author)
|
50
|
-
@author = author
|
51
|
-
end
|
52
|
-
|
53
|
-
def source
|
54
|
-
@source || 'UNKNOWN'
|
55
|
-
end
|
56
|
-
|
57
|
-
def source=(source)
|
58
|
-
@source = source
|
59
|
-
end
|
16
|
+
DEFAULTS = {
|
17
|
+
'name' => nil,
|
18
|
+
'version' => nil,
|
19
|
+
'author' => nil,
|
20
|
+
'summary' => nil,
|
21
|
+
'license' => 'Apache 2.0',
|
22
|
+
'source' => '',
|
23
|
+
'project_page' => nil,
|
24
|
+
'issues_url' => nil,
|
25
|
+
'dependencies' => [].freeze,
|
26
|
+
}
|
60
27
|
|
61
|
-
def
|
62
|
-
@
|
28
|
+
def initialize
|
29
|
+
@data = DEFAULTS.dup
|
30
|
+
@data['dependencies'] = @data['dependencies'].dup
|
63
31
|
end
|
64
32
|
|
65
|
-
|
66
|
-
|
33
|
+
# Returns a filesystem-friendly version of this module name.
|
34
|
+
def dashed_name
|
35
|
+
@data['name'].tr('/', '-') if @data['name']
|
67
36
|
end
|
68
37
|
|
69
|
-
|
70
|
-
|
71
|
-
|
38
|
+
# Returns a string that uniquely represents this version of this module.
|
39
|
+
def release_name
|
40
|
+
return nil unless @data['name'] && @data['version']
|
41
|
+
[ dashed_name, @data['version'] ].join('-')
|
42
|
+
end
|
43
|
+
|
44
|
+
alias :name :module_name
|
45
|
+
alias :full_module_name :dashed_name
|
46
|
+
|
47
|
+
# Merges the current set of metadata with another metadata hash. This
|
48
|
+
# method also handles the validation of module names and versions, in an
|
49
|
+
# effort to be proactive about module publishing constraints.
|
50
|
+
def update(data)
|
51
|
+
process_name(data) if data['name']
|
52
|
+
process_version(data) if data['version']
|
53
|
+
process_source(data) if data['source']
|
54
|
+
|
55
|
+
@data.merge!(data)
|
56
|
+
return self
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns a hash of the module's metadata. Used by Puppet's automated
|
60
|
+
# serialization routines.
|
61
|
+
#
|
62
|
+
# @see Puppet::Network::FormatSupport#to_data_hash
|
63
|
+
def to_hash
|
64
|
+
@data
|
65
|
+
end
|
66
|
+
alias :to_data_hash :to_hash
|
67
|
+
|
68
|
+
def to_json
|
69
|
+
# This is used to simulate an ordered hash. In particular, some keys
|
70
|
+
# are promoted to the top of the serialized hash (while others are
|
71
|
+
# demoted) for human-friendliness.
|
72
|
+
#
|
73
|
+
# This particularly works around the lack of ordered hashes in 1.8.7.
|
74
|
+
promoted_keys = %w[ name version author summary license source ]
|
75
|
+
demoted_keys = %w[ dependencies ]
|
76
|
+
keys = @data.keys
|
77
|
+
keys -= promoted_keys
|
78
|
+
keys -= demoted_keys
|
79
|
+
|
80
|
+
contents = (promoted_keys + keys + demoted_keys).map do |k|
|
81
|
+
value = (JSON.pretty_generate(@data[k]) rescue @data[k].to_json)
|
82
|
+
"#{k.to_json}: #{value}"
|
83
|
+
end
|
72
84
|
|
73
|
-
|
74
|
-
@summary = summary
|
85
|
+
"{\n" + contents.join(",\n").gsub(/^/, ' ') + "\n}\n"
|
75
86
|
end
|
76
87
|
|
77
|
-
|
78
|
-
|
88
|
+
# Expose any metadata keys as callable reader methods.
|
89
|
+
def method_missing(name, *args)
|
90
|
+
return @data[name.to_s] if @data.key? name.to_s
|
91
|
+
super
|
79
92
|
end
|
80
93
|
|
81
|
-
|
82
|
-
@description = description
|
83
|
-
end
|
94
|
+
private
|
84
95
|
|
85
|
-
|
86
|
-
|
87
|
-
|
96
|
+
# Do basic validation and parsing of the name parameter.
|
97
|
+
def process_name(data)
|
98
|
+
validate_name(data['name'])
|
99
|
+
author, @module_name = data['name'].split(/[-\/]/, 2)
|
88
100
|
|
89
|
-
|
90
|
-
@extra_metadata = extra_metadata
|
101
|
+
data['author'] ||= author if @data['author'] == DEFAULTS['author']
|
91
102
|
end
|
92
103
|
|
93
|
-
|
94
|
-
|
104
|
+
# Do basic validation on the version parameter.
|
105
|
+
def process_version(data)
|
106
|
+
validate_version(data['version'])
|
95
107
|
end
|
96
108
|
|
97
|
-
|
98
|
-
|
99
|
-
|
109
|
+
# Do basic parsing of the source parameter. If the source is hosted on
|
110
|
+
# GitHub, we can predict sensible defaults for both project_page and
|
111
|
+
# issues_url.
|
112
|
+
def process_source(data)
|
113
|
+
if data['source'] =~ %r[://]
|
114
|
+
source_uri = URI.parse(data['source'])
|
115
|
+
else
|
116
|
+
source_uri = URI.parse("http://#{data['source']}")
|
117
|
+
end
|
100
118
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
119
|
+
if source_uri.host =~ /^(www\.)?github\.com$/
|
120
|
+
source_uri.scheme = 'https'
|
121
|
+
source_uri.path.sub!(/\.git$/, '')
|
122
|
+
data['project_page'] ||= @data['project_page'] || source_uri.to_s
|
123
|
+
data['issues_url'] ||= @data['issues_url'] || source_uri.to_s.sub(/\/*$/, '') + '/issues'
|
124
|
+
end
|
106
125
|
|
107
|
-
|
108
|
-
|
109
|
-
return @checksums ||= {}
|
126
|
+
rescue URI::Error
|
127
|
+
return
|
110
128
|
end
|
111
129
|
|
112
|
-
#
|
113
|
-
|
114
|
-
|
115
|
-
def dashed_name
|
116
|
-
return [@username, @name].compact.join('-')
|
117
|
-
end
|
130
|
+
# Validates that the given module name is both namespaced and well-formed.
|
131
|
+
def validate_name(name)
|
132
|
+
return if name =~ /\A[a-z0-9]+[-\/][a-z][a-z0-9_]*\Z/i
|
118
133
|
|
119
|
-
|
120
|
-
|
121
|
-
def release_name
|
122
|
-
return [dashed_name, @version].join('-')
|
123
|
-
end
|
134
|
+
namespace, modname = name.split(/[-\/]/, 2)
|
135
|
+
modname = :namespace_missing if namespace == ''
|
124
136
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
137
|
+
err = case modname
|
138
|
+
when nil, '', :namespace_missing
|
139
|
+
"the field must be a namespaced module name"
|
140
|
+
when /[^a-z0-9_]/i
|
141
|
+
"the module name contains non-alphanumeric (or underscore) characters"
|
142
|
+
when /^[^a-z]/i
|
143
|
+
"the module name must begin with a letter"
|
130
144
|
else
|
131
|
-
|
145
|
+
"the namespace contains non-alphanumeric characters"
|
132
146
|
end
|
133
|
-
end
|
134
147
|
|
135
|
-
|
136
|
-
return extra_metadata.merge({
|
137
|
-
'name' => @full_module_name,
|
138
|
-
'version' => @version,
|
139
|
-
'source' => source,
|
140
|
-
'author' => author,
|
141
|
-
'license' => license,
|
142
|
-
'summary' => summary,
|
143
|
-
'description' => description,
|
144
|
-
'project_page' => project_page,
|
145
|
-
'dependencies' => dependencies,
|
146
|
-
'types' => types,
|
147
|
-
'checksums' => checksums
|
148
|
-
})
|
148
|
+
raise ArgumentError, "Invalid 'name' field in metadata.json: #{err}"
|
149
149
|
end
|
150
150
|
|
151
|
-
|
152
|
-
|
151
|
+
# Validates that the version string can be parsed as per SemVer.
|
152
|
+
def validate_version(version)
|
153
|
+
return if SemVer.valid?(version)
|
154
|
+
|
155
|
+
err = "version string cannot be parsed as a valid Semantic Version"
|
156
|
+
raise ArgumentError, "Invalid 'version' field in metadata.json: #{err}"
|
153
157
|
end
|
154
158
|
end
|
155
159
|
end
|
@@ -30,49 +30,49 @@ module Puppet::ModuleTool
|
|
30
30
|
# Set the +full_module_name+ (e.g. "myuser-mymodule"), which will also set the
|
31
31
|
# +username+ and module +name+. Required.
|
32
32
|
def name(name)
|
33
|
-
@metadata.
|
33
|
+
@metadata.update('name' => name)
|
34
34
|
end
|
35
35
|
|
36
36
|
# Set the module +version+ (e.g., "0.1.0"). Required.
|
37
37
|
def version(version)
|
38
|
-
@metadata.version
|
38
|
+
@metadata.update('version' => version)
|
39
39
|
end
|
40
40
|
|
41
41
|
# Add a dependency with the full_module_name +name+ (e.g. "myuser-mymodule"), an
|
42
42
|
# optional +version_requirement+ (e.g. "0.1.0") and +repository+ (a URL
|
43
43
|
# string). Optional. Can be called multiple times to add many dependencies.
|
44
44
|
def dependency(name, version_requirement = nil, repository = nil)
|
45
|
-
@metadata.dependencies << Dependency.new(name, version_requirement, repository)
|
45
|
+
@metadata.to_hash['dependencies'] << Dependency.new(name, version_requirement, repository)
|
46
46
|
end
|
47
47
|
|
48
48
|
# Set the source
|
49
49
|
def source(source)
|
50
|
-
@metadata.source
|
50
|
+
@metadata.update('source' => source)
|
51
51
|
end
|
52
52
|
|
53
53
|
# Set the author or default to +username+
|
54
54
|
def author(author)
|
55
|
-
|
55
|
+
@metadata.update('author' => author)
|
56
56
|
end
|
57
57
|
|
58
58
|
# Set the license
|
59
59
|
def license(license)
|
60
|
-
@metadata.license
|
60
|
+
@metadata.update('license' => license)
|
61
61
|
end
|
62
62
|
|
63
63
|
# Set the summary
|
64
64
|
def summary(summary)
|
65
|
-
@metadata.summary
|
65
|
+
@metadata.update('summary' => summary)
|
66
66
|
end
|
67
67
|
|
68
68
|
# Set the description
|
69
69
|
def description(description)
|
70
|
-
@metadata.description
|
70
|
+
@metadata.update('description' => description)
|
71
71
|
end
|
72
72
|
|
73
73
|
# Set the project page
|
74
74
|
def project_page(project_page)
|
75
|
-
@metadata.project_page
|
75
|
+
@metadata.update('project_page' => project_page)
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -1,8 +1,3 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
|
3
|
-
require 'puppet/module_tool'
|
4
|
-
require 'puppet/module_tool/errors'
|
5
|
-
|
6
1
|
module Puppet::ModuleTool::Shared
|
7
2
|
|
8
3
|
include Puppet::ModuleTool::Errors
|
@@ -80,7 +75,7 @@ module Puppet::ModuleTool::Shared
|
|
80
75
|
:queued => true
|
81
76
|
}
|
82
77
|
|
83
|
-
if
|
78
|
+
if forced?
|
84
79
|
range = SemVer[@version] rescue SemVer['>= 0.0.0']
|
85
80
|
else
|
86
81
|
range = (@conditions[mod]).map do |r|
|
@@ -101,7 +96,7 @@ module Puppet::ModuleTool::Shared
|
|
101
96
|
:conditions => @conditions
|
102
97
|
end
|
103
98
|
|
104
|
-
if !(
|
99
|
+
if !(forced? || @installed[mod].empty? || source.last[:name] == :you)
|
105
100
|
next if range === SemVer.new(@installed[mod].first.version)
|
106
101
|
action = :upgrade
|
107
102
|
elsif @installed[mod].empty?
|
@@ -165,4 +160,21 @@ module Puppet::ModuleTool::Shared
|
|
165
160
|
]
|
166
161
|
end.flatten
|
167
162
|
end
|
163
|
+
|
164
|
+
def forced?
|
165
|
+
options[:force]
|
166
|
+
end
|
167
|
+
|
168
|
+
def add_module_name_constraints_to_graph(graph)
|
169
|
+
# Puppet modules are installed by "module name", but resolved by
|
170
|
+
# "full name" (including namespace). So that we don't run into
|
171
|
+
# problems at install time, we should reject any solution that
|
172
|
+
# depends on multiple nodes with the same "module name".
|
173
|
+
graph.add_graph_constraint('PMT') do |nodes|
|
174
|
+
names = nodes.map { |x| x.dependency_names + [ x.name ] }.flatten
|
175
|
+
names = names.map { |x| x.tr('/', '-') }.uniq
|
176
|
+
names = names.map { |x| x[/-(.*)/, 1] }
|
177
|
+
names.length == names.uniq.length
|
178
|
+
end
|
179
|
+
end
|
168
180
|
end
|