puppet 6.17.0-x64-mingw32 → 6.18.0-x64-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.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -5
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +21 -3
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_system/file_impl.rb +3 -3
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/file_metadata/http.rb +1 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/pal/pal_impl.rb +27 -3
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/validation/checker4_0.rb +19 -15
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +34 -0
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +10 -3
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/trusted_external.rb +2 -2
- data/lib/puppet/type.rb +4 -3
- data/lib/puppet/type/file.rb +2 -2
- data/lib/puppet/type/file/source.rb +27 -7
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/service.rb +4 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +26 -12
- data/lib/puppet/util/autoload.rb +9 -7
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +15 -1
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/user.rb +219 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +78 -69
- data/man/man5/puppet.conf.5 +22 -3
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +2 -2
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/integration/application/agent_spec.rb +29 -37
- data/spec/integration/application/apply_spec.rb +149 -149
- data/spec/integration/application/config_spec.rb +74 -0
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +65 -16
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +50 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/user_spec.rb +7 -0
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/unit/application/agent_spec.rb +3 -4
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +39 -10
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer_spec.rb +47 -31
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/face/config_spec.rb +3 -1
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/http/client_spec.rb +0 -1
- data/spec/unit/http/resolver_spec.rb +0 -1
- data/spec/unit/http/service/ca_spec.rb +0 -1
- data/spec/unit/http/service/compiler_spec.rb +0 -1
- data/spec/unit/http/service/file_server_spec.rb +0 -1
- data/spec/unit/http/service/report_spec.rb +0 -1
- data/spec/unit/http/service_spec.rb +0 -1
- data/spec/unit/http/session_spec.rb +0 -1
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/provider/package/apt_spec.rb +77 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/init_spec.rb +41 -0
- data/spec/unit/provider/service/systemd_spec.rb +1 -6
- data/spec/unit/provider/service/windows_spec.rb +28 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/type/service_spec.rb +35 -2
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/command_line_spec.rb +11 -6
- metadata +21 -44
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/man_spec.rb +0 -31
data/lib/puppet/pops/adapters.rb
CHANGED
@@ -99,6 +99,13 @@ module Adapters
|
|
99
99
|
|
100
100
|
class PathsAndNameCacheAdapter < Puppet::Pops::Adaptable::Adapter
|
101
101
|
attr_accessor :cache, :paths
|
102
|
+
|
103
|
+
def self.create_adapter(env)
|
104
|
+
adapter = super(env)
|
105
|
+
adapter.paths = env.modulepath.map { |p| Pathname.new(p) }
|
106
|
+
adapter.cache = {}
|
107
|
+
adapter
|
108
|
+
end
|
102
109
|
end
|
103
110
|
|
104
111
|
# Attempts to find the module that `instance` originates from by looking at it's {SourcePosAdapter} and
|
@@ -117,10 +124,7 @@ module Adapters
|
|
117
124
|
def self.loader_name_by_source(environment, instance, file)
|
118
125
|
file = instance.file if file.nil?
|
119
126
|
return nil if file.nil? || EMPTY_STRING == file
|
120
|
-
pn_adapter = PathsAndNameCacheAdapter.adapt(environment)
|
121
|
-
a.paths ||= environment.modulepath.map { |p| Pathname.new(p) }
|
122
|
-
a.cache ||= {}
|
123
|
-
end
|
127
|
+
pn_adapter = PathsAndNameCacheAdapter.adapt(environment)
|
124
128
|
dir = File.dirname(file)
|
125
129
|
pn_adapter.cache.fetch(dir) do |key|
|
126
130
|
mod = find_module_for_dir(environment, pn_adapter.paths, dir)
|
@@ -7,10 +7,12 @@ module Loader
|
|
7
7
|
#
|
8
8
|
# @api private
|
9
9
|
class Runtime3TypeLoader < BaseLoader
|
10
|
-
|
10
|
+
attr_reader :resource_3x_loader
|
11
|
+
|
12
|
+
def initialize(parent_loader, loaders, environment, resource_3x_loader)
|
11
13
|
super(parent_loader, environment.name)
|
12
14
|
@environment = environment
|
13
|
-
@resource_3x_loader =
|
15
|
+
@resource_3x_loader = resource_3x_loader
|
14
16
|
end
|
15
17
|
|
16
18
|
def discover(type, error_collector = nil, name_authority = Pcore::RUNTIME_NAME_AUTHORITY, &block)
|
data/lib/puppet/pops/loaders.rb
CHANGED
@@ -18,18 +18,18 @@ class Loaders
|
|
18
18
|
attr_reader :private_environment_loader
|
19
19
|
attr_reader :environment
|
20
20
|
|
21
|
-
def self.new(environment, for_agent = false)
|
21
|
+
def self.new(environment, for_agent = false, load_from_pcore = true)
|
22
22
|
environment.lock.synchronize do
|
23
23
|
obj = environment.loaders
|
24
24
|
if obj.nil?
|
25
25
|
obj = self.allocate
|
26
|
-
obj.send(:initialize, environment, for_agent)
|
26
|
+
obj.send(:initialize, environment, for_agent, load_from_pcore)
|
27
27
|
end
|
28
28
|
obj
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def initialize(environment, for_agent)
|
32
|
+
def initialize(environment, for_agent, load_from_pcore = true)
|
33
33
|
# Protect against environment havoc
|
34
34
|
raise ArgumentError.new(_("Attempt to redefine already initialized loaders for environment")) unless environment.loaders.nil?
|
35
35
|
environment.loaders = self
|
@@ -51,12 +51,13 @@ class Loaders
|
|
51
51
|
# TODO: loaders need to work when also running in an agent doing catalog application. There is no
|
52
52
|
# concept of environment the same way as when running as a master (except when doing apply).
|
53
53
|
# The creation mechanisms should probably differ between the two.
|
54
|
-
@private_environment_loader =
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
54
|
+
@private_environment_loader =
|
55
|
+
if for_agent
|
56
|
+
@puppet_cache_loader = create_puppet_cache_loader
|
57
|
+
create_environment_loader(environment, @puppet_cache_loader, load_from_pcore)
|
58
|
+
else
|
59
|
+
create_environment_loader(environment, @puppet_system_loader, load_from_pcore)
|
60
|
+
end
|
60
61
|
|
61
62
|
Pcore.init_env(@private_environment_loader)
|
62
63
|
|
@@ -362,7 +363,7 @@ class Loaders
|
|
362
363
|
Loader::ModuleLoaders.cached_loader_from(puppet_system_loader, self)
|
363
364
|
end
|
364
365
|
|
365
|
-
def create_environment_loader(environment, parent_loader)
|
366
|
+
def create_environment_loader(environment, parent_loader, load_from_pcore = true)
|
366
367
|
# This defines where to start parsing/evaluating - the "initial import" (to use 3x terminology)
|
367
368
|
# Is either a reference to a single .pp file, or a directory of manifests. If the environment becomes
|
368
369
|
# a module and can hold functions, types etc. then these are available across all other modules without
|
@@ -387,7 +388,13 @@ class Loaders
|
|
387
388
|
else
|
388
389
|
# Create the 3.x resource type loader
|
389
390
|
static_loader.runtime_3_init
|
390
|
-
|
391
|
+
# Create pcore resource type loader, if applicable
|
392
|
+
pcore_resource_type_loader = if load_from_pcore && env_path
|
393
|
+
Loader::ModuleLoaders.pcore_resource_type_loader_from(parent_loader, self, env_path)
|
394
|
+
else
|
395
|
+
nil
|
396
|
+
end
|
397
|
+
@runtime3_type_loader = add_loader_by_name(Loader::Runtime3TypeLoader.new(parent_loader, self, environment, pcore_resource_type_loader))
|
391
398
|
|
392
399
|
if env_path.nil?
|
393
400
|
# Not a real directory environment, cannot work as a module TODO: Drop when legacy env are dropped?
|
@@ -47,7 +47,7 @@ class EnvironmentContext < Adaptable::Adapter
|
|
47
47
|
file_data = @file_data_cache[path]
|
48
48
|
stat = Puppet::FileSystem.stat(path)
|
49
49
|
unless file_data && file_data.valid?(stat)
|
50
|
-
Puppet.debug
|
50
|
+
Puppet.debug { "File at '#{path}' was changed, reloading" } if file_data
|
51
51
|
content = Puppet::FileSystem.read(path, :encoding => 'utf-8')
|
52
52
|
file_data = FileData.new(path, stat.ino, stat.mtime, stat.size, block_given? ? yield(content) : content)
|
53
53
|
@file_data_cache[path] = file_data
|
@@ -46,6 +46,7 @@ class HieraConfig
|
|
46
46
|
KEY_DATADIR = 'datadir'.freeze
|
47
47
|
KEY_DEFAULT_HIERARCHY = 'default_hierarchy'.freeze
|
48
48
|
KEY_HIERARCHY = 'hierarchy'.freeze
|
49
|
+
KEY_PLAN_HIERARCHY = 'plan_hierarchy'.freeze
|
49
50
|
KEY_LOGGER = 'logger'.freeze
|
50
51
|
KEY_OPTIONS = 'options'.freeze
|
51
52
|
KEY_PATH = 'path'.freeze
|
@@ -580,6 +581,7 @@ class HieraConfigV5 < HieraConfig
|
|
580
581
|
tf.optional(KEY_OPTIONS) => tf.hash_kv(option_name_t, tf.data),
|
581
582
|
}),
|
582
583
|
tf.optional(KEY_HIERARCHY) => hierarchy_t,
|
584
|
+
tf.optional(KEY_PLAN_HIERARCHY) => hierarchy_t,
|
583
585
|
tf.optional(KEY_DEFAULT_HIERARCHY) => hierarchy_t
|
584
586
|
})
|
585
587
|
end
|
@@ -600,7 +602,15 @@ class HieraConfigV5 < HieraConfig
|
|
600
602
|
return data_providers
|
601
603
|
end
|
602
604
|
|
603
|
-
|
605
|
+
compiler = Puppet.lookup(:pal_compiler) { nil }
|
606
|
+
config_key = if compiler.is_a?(Puppet::Pal::ScriptCompiler) && !@config[KEY_PLAN_HIERARCHY].nil?
|
607
|
+
KEY_PLAN_HIERARCHY
|
608
|
+
elsif use_default_hierarchy
|
609
|
+
KEY_DEFAULT_HIERARCHY
|
610
|
+
else
|
611
|
+
KEY_HIERARCHY
|
612
|
+
end
|
613
|
+
@config[config_key].each do |he|
|
604
614
|
name = he[KEY_NAME]
|
605
615
|
if data_providers.include?(name)
|
606
616
|
first_line = find_line_matching(/\s+name:\s+['"]?#{name}(?:[^\w]|$)/)
|
@@ -691,6 +701,9 @@ class HieraConfigV5 < HieraConfig
|
|
691
701
|
defaults = config[KEY_DEFAULTS]
|
692
702
|
validate_defaults(defaults) unless defaults.nil?
|
693
703
|
config[KEY_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
|
704
|
+
if config.include?(KEY_PLAN_HIERARCHY)
|
705
|
+
config[KEY_PLAN_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
|
706
|
+
end
|
694
707
|
|
695
708
|
if config.include?(KEY_DEFAULT_HIERARCHY)
|
696
709
|
unless owner.is_a?(ModuleDataProvider)
|
@@ -23,13 +23,16 @@ module Puppet::Pops::Types
|
|
23
23
|
#
|
24
24
|
# An `ArgumentError` is raised for all other objects.
|
25
25
|
#
|
26
|
-
# @param
|
26
|
+
# @param my_caller [Object] The calling object to reference in errors
|
27
|
+
# @param obj [Object] The object to produce an `Iterable` for
|
28
|
+
# @param infer_elements [Boolean] Whether or not to recursively infer all elements of obj. Optional
|
29
|
+
#
|
27
30
|
# @return [Iterable,nil] The produced `Iterable`
|
28
31
|
# @raise [ArgumentError] In case an `Iterable` cannot be produced
|
29
32
|
# @api public
|
30
|
-
def self.asserted_iterable(
|
31
|
-
iter = self.on(obj)
|
32
|
-
raise ArgumentError, "#{
|
33
|
+
def self.asserted_iterable(my_caller, obj, infer_elements = false)
|
34
|
+
iter = self.on(obj, nil, infer_elements)
|
35
|
+
raise ArgumentError, "#{my_caller.class}(): wrong argument type (#{obj.class}; is not Iterable." if iter.nil?
|
33
36
|
iter
|
34
37
|
end
|
35
38
|
|
@@ -48,11 +51,14 @@ module Puppet::Pops::Types
|
|
48
51
|
# The value `nil` is returned for all other objects.
|
49
52
|
#
|
50
53
|
# @param o [Object] The object to produce an `Iterable` for
|
51
|
-
# @param element_type [PAnyType] the element type for the iterator. Optional
|
54
|
+
# @param element_type [PAnyType] the element type for the iterator. Optional
|
55
|
+
# @param infer_elements [Boolean] if element_type is nil, whether or not to recursively
|
56
|
+
# infer types for the entire collection. Optional
|
57
|
+
#
|
52
58
|
# @return [Iterable,nil] The produced `Iterable` or `nil` if it couldn't be produced
|
53
59
|
#
|
54
60
|
# @api public
|
55
|
-
def self.on(o, element_type = nil)
|
61
|
+
def self.on(o, element_type = nil, infer_elements = true)
|
56
62
|
case o
|
57
63
|
when IteratorProducer
|
58
64
|
o.iterator
|
@@ -64,7 +70,7 @@ module Puppet::Pops::Types
|
|
64
70
|
if o.empty?
|
65
71
|
Iterator.new(PUnitType::DEFAULT, o.each)
|
66
72
|
else
|
67
|
-
if element_type.nil?
|
73
|
+
if element_type.nil? && infer_elements
|
68
74
|
tc = TypeCalculator.singleton
|
69
75
|
element_type = PVariantType.maybe_create(o.map {|e| tc.infer_set(e) })
|
70
76
|
end
|
@@ -75,7 +81,7 @@ module Puppet::Pops::Types
|
|
75
81
|
if o.empty?
|
76
82
|
HashIterator.new(PHashType::DEFAULT_KEY_PAIR_TUPLE, o.each)
|
77
83
|
else
|
78
|
-
if element_type.nil?
|
84
|
+
if element_type.nil? && infer_elements
|
79
85
|
tc = TypeCalculator.singleton
|
80
86
|
element_type = PTupleType.new([
|
81
87
|
PVariantType.maybe_create(o.keys.map {|e| tc.infer_set(e) }),
|
@@ -202,6 +208,26 @@ module Puppet::Pops::Types
|
|
202
208
|
@enumeration.send(name, *arguments, &block)
|
203
209
|
end
|
204
210
|
|
211
|
+
def next
|
212
|
+
@enumeration.next
|
213
|
+
end
|
214
|
+
|
215
|
+
def map(*args, &block)
|
216
|
+
@enumeration.map(*args, &block)
|
217
|
+
end
|
218
|
+
|
219
|
+
def reduce(*args, &block)
|
220
|
+
@enumeration.reduce(*args, &block)
|
221
|
+
end
|
222
|
+
|
223
|
+
def all?(&block)
|
224
|
+
@enumeration.all?(&block)
|
225
|
+
end
|
226
|
+
|
227
|
+
def any?(&block)
|
228
|
+
@enumeration.any?(&block)
|
229
|
+
end
|
230
|
+
|
205
231
|
def step(step, &block)
|
206
232
|
raise ArgumentError if step <= 0
|
207
233
|
r = self
|
@@ -595,36 +595,40 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
595
595
|
# @api private
|
596
596
|
class Puppet::Util::FileNamespaceAdapter < Puppet::Pops::Adaptable::Adapter
|
597
597
|
attr_accessor :file_to_namespace
|
598
|
+
|
599
|
+
def self.create_adapter(env)
|
600
|
+
adapter = super(env)
|
601
|
+
adapter.file_to_namespace = {}
|
602
|
+
adapter
|
603
|
+
end
|
598
604
|
end
|
599
605
|
|
600
606
|
def namespace_for_file(file)
|
601
607
|
env = Puppet.lookup(:current_environment)
|
602
608
|
return NO_NAMESPACE if env.nil?
|
603
609
|
|
604
|
-
Puppet::Util::FileNamespaceAdapter.adapt(env)
|
605
|
-
adapter.file_to_namespace ||= {}
|
610
|
+
adapter = Puppet::Util::FileNamespaceAdapter.adapt(env)
|
606
611
|
|
607
|
-
|
608
|
-
|
612
|
+
file_namespace = adapter.file_to_namespace[file]
|
613
|
+
return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation
|
609
614
|
|
610
|
-
|
615
|
+
path = Pathname.new(file)
|
611
616
|
|
612
|
-
|
617
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp"
|
613
618
|
|
614
|
-
|
619
|
+
path = path.expand_path
|
615
620
|
|
616
|
-
|
621
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest)
|
617
622
|
|
618
|
-
|
619
|
-
|
623
|
+
#All auto-loaded files from modules come from a module search path dir
|
624
|
+
relative_path = get_module_relative_path(path, env.full_modulepath)
|
620
625
|
|
621
|
-
|
626
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH
|
622
627
|
|
623
|
-
|
624
|
-
|
628
|
+
#If a file comes from a module, but isn't in the right place, always error
|
629
|
+
names = dir_to_names(relative_path)
|
625
630
|
|
626
|
-
|
627
|
-
end
|
631
|
+
return adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze)
|
628
632
|
end
|
629
633
|
|
630
634
|
def initial_manifest?(path, manifest_setting)
|
@@ -126,7 +126,7 @@ Puppet::Type.type(:file).provide :windows do
|
|
126
126
|
# If the SYSTEM account does _not_ have FullControl in this scenario, we should
|
127
127
|
# force the resource out of sync no matter what.
|
128
128
|
#TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
|
129
|
-
Puppet.debug _("%{resource_name}: %{mode_part_type} set to SYSTEM. SYSTEM permissions cannot be set below FullControl ('7')") % { resource_name: resource[:name], mode_part_type: mode_part['type']}
|
129
|
+
Puppet.debug { _("%{resource_name}: %{mode_part_type} set to SYSTEM. SYSTEM permissions cannot be set below FullControl ('7')") % { resource_name: resource[:name], mode_part_type: mode_part['type']} }
|
130
130
|
return nil
|
131
131
|
end
|
132
132
|
end
|
@@ -16,6 +16,7 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
16
16
|
|
17
17
|
commands :aptget => "/usr/bin/apt-get"
|
18
18
|
commands :aptcache => "/usr/bin/apt-cache"
|
19
|
+
commands :aptmark => "/usr/bin/apt-mark"
|
19
20
|
commands :preseed => "/usr/bin/debconf-set-selections"
|
20
21
|
|
21
22
|
defaultfor :osfamily => :debian
|
@@ -30,6 +31,39 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
30
31
|
false
|
31
32
|
end
|
32
33
|
|
34
|
+
def self.instances
|
35
|
+
packages = super
|
36
|
+
manual_marks = aptmark('showmanual').split("\n")
|
37
|
+
packages.each do |package|
|
38
|
+
package.mark = :manual if manual_marks.include?(package.name)
|
39
|
+
end
|
40
|
+
packages
|
41
|
+
end
|
42
|
+
|
43
|
+
def query
|
44
|
+
hash = super
|
45
|
+
hash[:mark] = :manual if aptmark('showmanual').split("\n").include?(@resource[:name])
|
46
|
+
hash
|
47
|
+
end
|
48
|
+
|
49
|
+
def initialize(value={})
|
50
|
+
super(value)
|
51
|
+
@property_flush = {}
|
52
|
+
end
|
53
|
+
|
54
|
+
def mark=(value)
|
55
|
+
@property_flush[:mark] = value
|
56
|
+
end
|
57
|
+
|
58
|
+
def flush
|
59
|
+
# unless we are removing the package mark it if it hasn't already been marked
|
60
|
+
if @property_flush
|
61
|
+
unless @property_flush[:mark] || [:purge, :absent].include?(resource[:ensure])
|
62
|
+
aptmark('manual', resource[:name])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
33
67
|
# A derivative of DPKG; this is how most people actually manage
|
34
68
|
# Debian boxes, and the only thing that differs is that it can
|
35
69
|
# install packages from remote sites.
|
@@ -53,11 +53,13 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
|
|
53
53
|
#
|
54
54
|
# In this case, causing the puppet_gem provider to inherit the parent gem provider's convenience gemcmd() methods, with the wrong path.
|
55
55
|
|
56
|
-
def self.execute_gem_command(command, command_options)
|
56
|
+
def self.execute_gem_command(command, command_options, custom_environment = {})
|
57
57
|
validate_command(command)
|
58
58
|
cmd = [command] << command_options
|
59
59
|
|
60
|
-
|
60
|
+
custom_environment = {'HOME'=>Puppet::Util.get_env('HOME')}.merge(custom_environment)
|
61
|
+
|
62
|
+
execute(cmd, {:failonfail => true, :combine => true, :custom_environment => custom_environment})
|
61
63
|
end
|
62
64
|
|
63
65
|
def self.instances(target_command = nil)
|
@@ -18,4 +18,9 @@ Puppet::Type.type(:package).provide :puppet_gem, :parent => :gem do
|
|
18
18
|
Puppet.debug("Invalidating rubygems cache after uninstalling gem '#{resource[:name]}'")
|
19
19
|
Puppet::Util::Autoload.gem_source.clear_paths
|
20
20
|
end
|
21
|
+
|
22
|
+
def self.execute_gem_command(command, command_options, custom_environment = {})
|
23
|
+
custom_environment['PKG_CONFIG_PATH'] = '/opt/puppetlabs/puppet/lib/pkgconfig' unless Puppet::Util::Platform.windows?
|
24
|
+
super(command, command_options, custom_environment)
|
25
|
+
end
|
21
26
|
end
|
@@ -187,6 +187,9 @@ Puppet::Type.type(:package).provide :zypper, :parent => :rpm, :source => :rpm do
|
|
187
187
|
if should.is_a?(String)
|
188
188
|
begin
|
189
189
|
should_version = Puppet::Util::Package::Version::Range.parse(should, Puppet::Util::Package::Version::Rpm)
|
190
|
+
if should_version.is_a?(RPM_VERSION_RANGE::Eq)
|
191
|
+
return super
|
192
|
+
end
|
190
193
|
rescue Puppet::Util::Package::Version::Range::ValidationFailure, Puppet::Util::Package::Version::Rpm::ValidationFailure
|
191
194
|
Puppet.debug("Cannot parse #{should} as a RPM version range")
|
192
195
|
return super
|
@@ -288,7 +288,7 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
|
|
288
288
|
# UNSUPPORTED
|
289
289
|
#- **roles**
|
290
290
|
# The roles the user has. Multiple roles should be
|
291
|
-
# specified as an array. Requires features
|
291
|
+
# specified as an array. Requires features manages_roles.
|
292
292
|
# UNSUPPORTED
|
293
293
|
#- **key_membership**
|
294
294
|
# Whether specified key value pairs should be treated as the only
|
@@ -33,7 +33,7 @@ Puppet::Type.type(:user).provide :user_role_add, :parent => :useradd, :source =>
|
|
33
33
|
set("shell", value)
|
34
34
|
end
|
35
35
|
|
36
|
-
has_features :manages_homedir, :allows_duplicates, :manages_solaris_rbac, :manages_passwords, :manages_password_age, :manages_shell
|
36
|
+
has_features :manages_homedir, :allows_duplicates, :manages_solaris_rbac, :manages_roles, :manages_passwords, :manages_password_age, :manages_shell
|
37
37
|
|
38
38
|
def check_valid_shell
|
39
39
|
unless File.exist?(@resource.should(:shell))
|
@@ -6,7 +6,7 @@ Puppet::Type.type(:user).provide :windows_adsi do
|
|
6
6
|
defaultfor :operatingsystem => :windows
|
7
7
|
confine :operatingsystem => :windows
|
8
8
|
|
9
|
-
has_features :manages_homedir, :manages_passwords
|
9
|
+
has_features :manages_homedir, :manages_passwords, :manages_roles
|
10
10
|
|
11
11
|
def initialize(value={})
|
12
12
|
super(value)
|
@@ -17,6 +17,23 @@ Puppet::Type.type(:user).provide :windows_adsi do
|
|
17
17
|
@user ||= Puppet::Util::Windows::ADSI::User.new(@resource[:name])
|
18
18
|
end
|
19
19
|
|
20
|
+
def roles
|
21
|
+
Puppet::Util::Windows::User::get_rights(@resource[:name])
|
22
|
+
end
|
23
|
+
|
24
|
+
def roles=(value)
|
25
|
+
current = roles.split(',')
|
26
|
+
should = value.split(',')
|
27
|
+
|
28
|
+
add_list = should - current
|
29
|
+
Puppet::Util::Windows::User::set_rights(@resource[:name], add_list) unless add_list.empty?
|
30
|
+
|
31
|
+
if @resource[:role_membership] == :inclusive
|
32
|
+
remove_list = current - should
|
33
|
+
Puppet::Util::Windows::User::remove_rights(@resource[:name], remove_list) unless remove_list.empty?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
20
37
|
def groups
|
21
38
|
@groups ||= Puppet::Util::Windows::ADSI::Group.name_sid_hash(user.groups)
|
22
39
|
@groups.keys
|
data/lib/puppet/settings.rb
CHANGED
@@ -1058,7 +1058,7 @@ Generated on #{Time.now}.
|
|
1058
1058
|
|
1059
1059
|
return if sections.empty?
|
1060
1060
|
|
1061
|
-
Puppet.debug
|
1061
|
+
Puppet.debug { "Applying settings catalog for sections #{sections.join(', ')}" }
|
1062
1062
|
|
1063
1063
|
begin
|
1064
1064
|
catalog = to_catalog(*sections).to_ral
|