bolt 0.17.1 → 0.17.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bolt might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bolt-modules/boltlib/lib/puppet/functions/run_task.rb +25 -13
- data/lib/bolt/cli.rb +45 -15
- data/lib/bolt/config.rb +48 -132
- data/lib/bolt/executor.rb +3 -10
- data/lib/bolt/inventory.rb +15 -1
- data/lib/bolt/puppetdb.rb +11 -0
- data/lib/bolt/puppetdb/client.rb +68 -0
- data/lib/bolt/puppetdb/config.rb +76 -0
- data/lib/bolt/target.rb +5 -4
- data/lib/bolt/transport/base.rb +11 -2
- data/lib/bolt/transport/local.rb +11 -5
- data/lib/bolt/transport/orch.rb +16 -5
- data/lib/bolt/transport/ssh.rb +32 -1
- data/lib/bolt/transport/ssh/connection.rb +17 -10
- data/lib/bolt/transport/winrm.rb +18 -1
- data/lib/bolt/transport/winrm/connection.rb +15 -16
- data/lib/bolt/util.rb +15 -0
- data/lib/bolt/version.rb +1 -1
- data/lib/bolt_ext/puppetdb_inventory.rb +5 -135
- data/vendored/facter/lib/facter/ec2/rest.rb +1 -1
- data/vendored/hiera/lib/hiera/version.rb +1 -1
- data/vendored/puppet/lib/puppet/application/agent.rb +1 -3
- data/vendored/puppet/lib/puppet/application/apply.rb +2 -4
- data/vendored/puppet/lib/puppet/application/cert.rb +6 -1
- data/vendored/puppet/lib/puppet/application/device.rb +100 -13
- data/vendored/puppet/lib/puppet/application/facts.rb +5 -0
- data/vendored/puppet/lib/puppet/application/lookup.rb +11 -1
- data/vendored/puppet/lib/puppet/configurer.rb +17 -4
- data/vendored/puppet/lib/puppet/configurer/plugin_handler.rb +1 -1
- data/vendored/puppet/lib/puppet/datatypes.rb +1 -1
- data/vendored/puppet/lib/puppet/defaults.rb +1 -1
- data/vendored/puppet/lib/puppet/environments.rb +2 -2
- data/vendored/puppet/lib/puppet/error.rb +6 -3
- data/vendored/puppet/lib/puppet/external/dot.rb +0 -7
- data/vendored/puppet/lib/puppet/external/nagios/parser.rb +1 -1
- data/vendored/puppet/lib/puppet/face/config.rb +41 -8
- data/vendored/puppet/lib/puppet/face/epp.rb +30 -5
- data/vendored/puppet/lib/puppet/face/facts.rb +49 -0
- data/vendored/puppet/lib/puppet/face/help.rb +33 -35
- data/vendored/puppet/lib/puppet/face/man.rb +55 -12
- data/vendored/puppet/lib/puppet/face/parser.rb +30 -3
- data/vendored/puppet/lib/puppet/file_bucket/file.rb +0 -2
- data/vendored/puppet/lib/puppet/file_serving/base.rb +10 -10
- data/vendored/puppet/lib/puppet/functions.rb +1 -3
- data/vendored/puppet/lib/puppet/functions/alert.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/all.rb +6 -6
- data/vendored/puppet/lib/puppet/functions/annotate.rb +10 -10
- data/vendored/puppet/lib/puppet/functions/any.rb +6 -6
- data/vendored/puppet/lib/puppet/functions/assert_type.rb +4 -4
- data/vendored/puppet/lib/puppet/functions/binary_file.rb +14 -2
- data/vendored/puppet/lib/puppet/functions/break.rb +31 -2
- data/vendored/puppet/lib/puppet/functions/call.rb +4 -4
- data/vendored/puppet/lib/puppet/functions/contain.rb +19 -3
- data/vendored/puppet/lib/puppet/functions/convert_to.rb +6 -5
- data/vendored/puppet/lib/puppet/functions/crit.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/debug.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/defined.rb +11 -9
- data/vendored/puppet/lib/puppet/functions/dig.rb +26 -2
- data/vendored/puppet/lib/puppet/functions/each.rb +8 -8
- data/vendored/puppet/lib/puppet/functions/emerg.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/empty.rb +79 -0
- data/vendored/puppet/lib/puppet/functions/err.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/filter.rb +7 -7
- data/vendored/puppet/lib/puppet/functions/find_file.rb +15 -1
- data/vendored/puppet/lib/puppet/functions/flatten.rb +64 -0
- data/vendored/puppet/lib/puppet/functions/hiera.rb +6 -6
- data/vendored/puppet/lib/puppet/functions/hiera_array.rb +6 -6
- data/vendored/puppet/lib/puppet/functions/hiera_hash.rb +6 -6
- data/vendored/puppet/lib/puppet/functions/hiera_include.rb +8 -8
- data/vendored/puppet/lib/puppet/functions/include.rb +28 -2
- data/vendored/puppet/lib/puppet/functions/info.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/inline_epp.rb +2 -2
- data/vendored/puppet/lib/puppet/functions/join.rb +56 -0
- data/vendored/puppet/lib/puppet/functions/keys.rb +25 -0
- data/vendored/puppet/lib/puppet/functions/length.rb +44 -0
- data/vendored/puppet/lib/puppet/functions/lest.rb +39 -1
- data/vendored/puppet/lib/puppet/functions/map.rb +10 -9
- data/vendored/puppet/lib/puppet/functions/match.rb +6 -6
- data/vendored/puppet/lib/puppet/functions/new.rb +995 -2
- data/vendored/puppet/lib/puppet/functions/next.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/notice.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/reduce.rb +6 -6
- data/vendored/puppet/lib/puppet/functions/regsubst.rb +9 -3
- data/vendored/puppet/lib/puppet/functions/require.rb +36 -2
- data/vendored/puppet/lib/puppet/functions/return.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/reverse_each.rb +71 -2
- data/vendored/puppet/lib/puppet/functions/slice.rb +23 -9
- data/vendored/puppet/lib/puppet/functions/split.rb +12 -10
- data/vendored/puppet/lib/puppet/functions/step.rb +73 -1
- data/vendored/puppet/lib/puppet/functions/strftime.rb +176 -2
- data/vendored/puppet/lib/puppet/functions/then.rb +65 -2
- data/vendored/puppet/lib/puppet/functions/tree_each.rb +19 -19
- data/vendored/puppet/lib/puppet/functions/type.rb +42 -1
- data/vendored/puppet/lib/puppet/functions/unique.rb +13 -13
- data/vendored/puppet/lib/puppet/functions/unwrap.rb +8 -4
- data/vendored/puppet/lib/puppet/functions/values.rb +25 -0
- data/vendored/puppet/lib/puppet/functions/versioncmp.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/warning.rb +1 -1
- data/vendored/puppet/lib/puppet/functions/with.rb +6 -4
- data/vendored/puppet/lib/puppet/indirector/certificate_status/file.rb +1 -1
- data/vendored/puppet/lib/puppet/indirector/facts/facter.rb +1 -3
- data/vendored/puppet/lib/puppet/indirector/facts/rest.rb +21 -0
- data/vendored/puppet/lib/puppet/indirector/facts/yaml.rb +0 -4
- data/vendored/puppet/lib/puppet/indirector/file_content/http.rb +3 -1
- data/vendored/puppet/lib/puppet/indirector/indirection.rb +5 -3
- data/vendored/puppet/lib/puppet/indirector/request.rb +6 -2
- data/vendored/puppet/lib/puppet/module/task.rb +2 -2
- data/vendored/puppet/lib/puppet/module_tool/tar/mini.rb +57 -4
- data/vendored/puppet/lib/puppet/network/authconfig.rb +1 -1
- data/vendored/puppet/lib/puppet/network/http/api/indirected_routes.rb +1 -0
- data/vendored/puppet/lib/puppet/network/resolver.rb +1 -2
- data/vendored/puppet/lib/puppet/node.rb +4 -3
- data/vendored/puppet/lib/puppet/parser/compiler.rb +12 -5
- data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +1 -1
- data/vendored/puppet/lib/puppet/parser/functions/fqdn_rand.rb +15 -4
- data/vendored/puppet/lib/puppet/parser/functions/new.rb +31 -46
- data/vendored/puppet/lib/puppet/parser/parser_factory.rb +1 -1
- data/vendored/puppet/lib/puppet/parser/resource.rb +1 -1
- data/vendored/puppet/lib/puppet/parser/type_loader.rb +11 -11
- data/vendored/puppet/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
- data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -2
- data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_support.rb +5 -2
- data/vendored/puppet/lib/puppet/pops/functions/dispatch.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/issue_reporter.rb +18 -1
- data/vendored/puppet/lib/puppet/pops/issues.rb +6 -3
- data/vendored/puppet/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -2
- data/vendored/puppet/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
- data/vendored/puppet/lib/puppet/pops/loader/task_instantiator.rb +4 -4
- data/vendored/puppet/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -1
- data/vendored/puppet/lib/puppet/pops/loaders.rb +18 -7
- data/vendored/puppet/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/model/factory.rb +6 -3
- data/vendored/puppet/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
- data/vendored/puppet/lib/puppet/pops/model/pn_transformer.rb +400 -0
- data/vendored/puppet/lib/puppet/pops/parser/eparser.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/parser/lexer_support.rb +3 -2
- data/vendored/puppet/lib/puppet/pops/parser/locator.rb +0 -2
- data/vendored/puppet/lib/puppet/pops/parser/pn_parser.rb +316 -0
- data/vendored/puppet/lib/puppet/pops/pcore.rb +17 -17
- data/vendored/puppet/lib/puppet/pops/pn.rb +236 -0
- data/vendored/puppet/lib/puppet/pops/resource/resource_type_impl.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/types/class_loader.rb +6 -3
- data/vendored/puppet/lib/puppet/pops/types/implementation_registry.rb +28 -35
- data/vendored/puppet/lib/puppet/pops/types/p_object_type.rb +3 -3
- data/vendored/puppet/lib/puppet/pops/types/p_timespan_type.rb +2 -2
- data/vendored/puppet/lib/puppet/pops/types/p_type_set_type.rb +24 -1
- data/vendored/puppet/lib/puppet/pops/types/ruby_generator.rb +3 -4
- data/vendored/puppet/lib/puppet/pops/types/type_calculator.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/types/type_factory.rb +0 -4
- data/vendored/puppet/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/types/type_parser.rb +14 -7
- data/vendored/puppet/lib/puppet/pops/types/types.rb +1 -1
- data/vendored/puppet/lib/puppet/pops/utils.rb +2 -2
- data/vendored/puppet/lib/puppet/pops/validation/checker4_0.rb +6 -2
- data/vendored/puppet/lib/puppet/provider/group/groupadd.rb +3 -1
- data/vendored/puppet/lib/puppet/provider/group/windows_adsi.rb +4 -7
- data/vendored/puppet/lib/puppet/provider/nameservice.rb +3 -3
- data/vendored/puppet/lib/puppet/provider/package/dnf.rb +1 -1
- data/vendored/puppet/lib/puppet/provider/package/gem.rb +1 -1
- data/vendored/puppet/lib/puppet/provider/package/pacman.rb +4 -4
- data/vendored/puppet/lib/puppet/provider/package/pip.rb +3 -3
- data/vendored/puppet/lib/puppet/provider/package/pkgdmg.rb +3 -3
- data/vendored/puppet/lib/puppet/provider/package/pkgutil.rb +2 -2
- data/vendored/puppet/lib/puppet/provider/package/portage.rb +9 -9
- data/vendored/puppet/lib/puppet/provider/package/zypper.rb +2 -2
- data/vendored/puppet/lib/puppet/provider/service/base.rb +1 -1
- data/vendored/puppet/lib/puppet/provider/service/smf.rb +3 -2
- data/vendored/puppet/lib/puppet/provider/user/useradd.rb +6 -2
- data/vendored/puppet/lib/puppet/provider/user/windows_adsi.rb +1 -1
- data/vendored/puppet/lib/puppet/provider/zfs/zfs.rb +3 -2
- data/vendored/puppet/lib/puppet/reference/configuration.rb +2 -0
- data/vendored/puppet/lib/puppet/reference/type.rb +11 -11
- data/vendored/puppet/lib/puppet/resource.rb +1 -1
- data/vendored/puppet/lib/puppet/resource/capability_finder.rb +2 -2
- data/vendored/puppet/lib/puppet/resource/catalog.rb +2 -2
- data/vendored/puppet/lib/puppet/resource/status.rb +9 -2
- data/vendored/puppet/lib/puppet/resource/type.rb +1 -1
- data/vendored/puppet/lib/puppet/settings.rb +31 -19
- data/vendored/puppet/lib/puppet/settings/base_setting.rb +5 -0
- data/vendored/puppet/lib/puppet/settings/config_file.rb +1 -1
- data/vendored/puppet/lib/puppet/settings/ttl_setting.rb +5 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/vendored/puppet/lib/puppet/ssl/certificate_request.rb +0 -2
- data/vendored/puppet/lib/puppet/transaction/additional_resource_generator.rb +2 -2
- data/vendored/puppet/lib/puppet/transaction/event.rb +1 -1
- data/vendored/puppet/lib/puppet/transaction/report.rb +1 -1
- data/vendored/puppet/lib/puppet/type.rb +9 -13
- data/vendored/puppet/lib/puppet/type/augeas.rb +2 -2
- data/vendored/puppet/lib/puppet/type/cron.rb +11 -6
- data/vendored/puppet/lib/puppet/type/exec.rb +1 -1
- data/vendored/puppet/lib/puppet/type/file.rb +4 -5
- data/vendored/puppet/lib/puppet/type/host.rb +1 -1
- data/vendored/puppet/lib/puppet/type/k5login.rb +30 -54
- data/vendored/puppet/lib/puppet/type/package.rb +3 -3
- data/vendored/puppet/lib/puppet/type/schedule.rb +12 -12
- data/vendored/puppet/lib/puppet/type/scheduled_task.rb +2 -2
- data/vendored/puppet/lib/puppet/type/ssh_authorized_key.rb +5 -5
- data/vendored/puppet/lib/puppet/type/sshkey.rb +2 -2
- data/vendored/puppet/lib/puppet/type/tidy.rb +9 -2
- data/vendored/puppet/lib/puppet/type/user.rb +1 -1
- data/vendored/puppet/lib/puppet/type/yumrepo.rb +25 -4
- data/vendored/puppet/lib/puppet/type/zfs.rb +4 -0
- data/vendored/puppet/lib/puppet/util.rb +0 -4
- data/vendored/puppet/lib/puppet/util/backups.rb +1 -1
- data/vendored/puppet/lib/puppet/util/http_proxy.rb +4 -2
- data/vendored/puppet/lib/puppet/util/inifile.rb +3 -4
- data/vendored/puppet/lib/puppet/util/log.rb +2 -5
- data/vendored/puppet/lib/puppet/util/network_device/cisco/facts.rb +1 -1
- data/vendored/puppet/lib/puppet/util/reference.rb +1 -8
- data/vendored/puppet/lib/puppet/util/tagging.rb +1 -1
- data/vendored/puppet/lib/puppet/util/warnings.rb +0 -2
- data/vendored/puppet/lib/puppet/util/windows/adsi.rb +15 -18
- data/vendored/puppet/lib/puppet/util/windows/com.rb +2 -1
- data/vendored/puppet/lib/puppet/util/windows/file.rb +2 -2
- data/vendored/puppet/lib/puppet/util/windows/principal.rb +7 -6
- data/vendored/puppet/lib/puppet/util/windows/sid.rb +60 -7
- data/vendored/puppet/lib/puppet/util/windows/taskscheduler.rb +0 -9
- data/vendored/puppet/lib/puppet/version.rb +1 -1
- data/vendored/puppet/lib/puppet_pal.rb +53 -48
- metadata +15 -2
@@ -149,7 +149,7 @@ class ResourceTypeImpl
|
|
149
149
|
# Here it is silently ignored.
|
150
150
|
nil
|
151
151
|
when 1
|
152
|
-
if @
|
152
|
+
if @title_patterns_hash.nil?
|
153
153
|
[ [ /(.*)/m, [ [@key_attributes.first] ] ] ]
|
154
154
|
else
|
155
155
|
# TechDebt: The case of having one namevar and an empty title patterns is unspecified behavior in puppet.
|
@@ -32,8 +32,6 @@ class ClassLoader
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
private
|
36
|
-
|
37
35
|
def self.provide_from_type(type)
|
38
36
|
case type
|
39
37
|
when PRuntimeType
|
@@ -66,12 +64,13 @@ class ClassLoader
|
|
66
64
|
when PPatternType ; String
|
67
65
|
when PEnumType ; String
|
68
66
|
when PFloatType ; Float
|
69
|
-
when PUndefType
|
67
|
+
when PUndefType ; NilClass
|
70
68
|
when PCallableType ; Proc
|
71
69
|
else
|
72
70
|
nil
|
73
71
|
end
|
74
72
|
end
|
73
|
+
private_class_method :provide_from_type
|
75
74
|
|
76
75
|
def self.provide_from_string(name)
|
77
76
|
name_path = name.split(TypeFormatter::NAME_SEGMENT_SEPARATOR)
|
@@ -97,6 +96,7 @@ class ClassLoader
|
|
97
96
|
return nil unless result.is_a?(Module)
|
98
97
|
result
|
99
98
|
end
|
99
|
+
private_class_method :provide_from_string
|
100
100
|
|
101
101
|
def self.find_class(name_path)
|
102
102
|
name_path.reduce(Object) do |ns, name|
|
@@ -107,6 +107,7 @@ class ClassLoader
|
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
110
|
+
private_class_method :find_class
|
110
111
|
|
111
112
|
def self.paths_for_name(fq_named_parts)
|
112
113
|
# search two entries, one where all parts are decamelized, and one with names just downcased
|
@@ -115,6 +116,7 @@ class ClassLoader
|
|
115
116
|
#
|
116
117
|
[fq_named_parts.map {|part| de_camel(part)}.join('/'), fq_named_parts.join('/').downcase ]
|
117
118
|
end
|
119
|
+
private_class_method :paths_for_name
|
118
120
|
|
119
121
|
def self.de_camel(fq_name)
|
120
122
|
fq_name.to_s.gsub(/::/, '/').
|
@@ -123,6 +125,7 @@ class ClassLoader
|
|
123
125
|
tr("-", "_").
|
124
126
|
downcase
|
125
127
|
end
|
128
|
+
private_class_method :de_camel
|
126
129
|
|
127
130
|
end
|
128
131
|
end
|
@@ -8,20 +8,15 @@ module Types
|
|
8
8
|
class ImplementationRegistry
|
9
9
|
TYPE_REGEXP_SUBST = TypeFactory.tuple([PRegexpType::DEFAULT, PStringType::NON_EMPTY])
|
10
10
|
|
11
|
-
def self.singleton
|
12
|
-
@singleton ||= new(Loaders.static_loader)
|
13
|
-
end
|
14
|
-
|
15
11
|
# Create a new instance. This method is normally only called once
|
16
12
|
#
|
17
|
-
#
|
18
|
-
|
19
|
-
|
13
|
+
# @param parent [ImplementationRegistry, nil] the parent of this registry
|
14
|
+
def initialize(parent = nil)
|
15
|
+
@parent = parent
|
20
16
|
@type_names_per_implementation = {}
|
21
17
|
@implementations_per_type_name = {}
|
22
18
|
@type_name_substitutions = []
|
23
19
|
@impl_name_substitutions = []
|
24
|
-
TypeParser.type_map.values.each { |type| register_implementation(type.simple_name, type.class.name, static_loader) }
|
25
20
|
end
|
26
21
|
|
27
22
|
# Register a bidirectional type mapping.
|
@@ -29,20 +24,18 @@ module Types
|
|
29
24
|
# @overload register_type_mapping(runtime_type, puppet_type)
|
30
25
|
# @param runtime_type [PRuntimeType] type that represents the runtime module or class to map to a puppet type
|
31
26
|
# @param puppet_type [PAnyType] type that will be mapped to the runtime module or class
|
32
|
-
# @param loader [Loader::Loader] the loader to use when resolving names
|
33
27
|
# @overload register_type_mapping(runtime_type, pattern_replacement)
|
34
28
|
# @param runtime_type [PRuntimeType] type containing the pattern and replacement to map the runtime type to a puppet type
|
35
29
|
# @param puppet_type [Array(Regexp,String)] the pattern and replacement to map a puppet type to a runtime type
|
36
|
-
|
37
|
-
def register_type_mapping(runtime_type, puppet_type_or_pattern, loader)
|
30
|
+
def register_type_mapping(runtime_type, puppet_type_or_pattern, _ = nil)
|
38
31
|
TypeAsserter.assert_assignable('First argument of type mapping', PRuntimeType::RUBY, runtime_type)
|
39
32
|
expr = runtime_type.name_or_pattern
|
40
33
|
if expr.is_a?(Array)
|
41
34
|
TypeAsserter.assert_instance_of('Second argument of type mapping', TYPE_REGEXP_SUBST, puppet_type_or_pattern)
|
42
|
-
register_implementation_regexp(puppet_type_or_pattern, expr
|
35
|
+
register_implementation_regexp(puppet_type_or_pattern, expr)
|
43
36
|
else
|
44
37
|
TypeAsserter.assert_instance_of('Second argument of type mapping', PTypeType::DEFAULT, puppet_type_or_pattern)
|
45
|
-
register_implementation(puppet_type_or_pattern, expr
|
38
|
+
register_implementation(puppet_type_or_pattern, expr)
|
46
39
|
end
|
47
40
|
end
|
48
41
|
|
@@ -50,23 +43,20 @@ module Types
|
|
50
43
|
#
|
51
44
|
# @param type_namespace [String] the namespace for the puppet types
|
52
45
|
# @param impl_namespace [String] the namespace for the implementations
|
53
|
-
|
54
|
-
def register_implementation_namespace(type_namespace, impl_namespace, loader)
|
46
|
+
def register_implementation_namespace(type_namespace, impl_namespace, _ = nil)
|
55
47
|
ns = TypeFormatter::NAME_SEGMENT_SEPARATOR
|
56
48
|
register_implementation_regexp(
|
57
49
|
[/\A#{type_namespace}#{ns}(\w+)\z/, "#{impl_namespace}#{ns}\\1"],
|
58
|
-
[/\A#{impl_namespace}#{ns}(\w+)\z/, "#{type_namespace}#{ns}\\1"]
|
59
|
-
loader)
|
50
|
+
[/\A#{impl_namespace}#{ns}(\w+)\z/, "#{type_namespace}#{ns}\\1"])
|
60
51
|
end
|
61
52
|
|
62
53
|
# Register a bidirectional regexp mapping
|
63
54
|
#
|
64
55
|
# @param type_name_subst [Array(Regexp,String)] regexp and replacement mapping type names to runtime names
|
65
56
|
# @param impl_name_subst [Array(Regexp,String)] regexp and replacement mapping runtime names to type names
|
66
|
-
|
67
|
-
|
68
|
-
@
|
69
|
-
@impl_name_substitutions << [impl_name_subst, loader]
|
57
|
+
def register_implementation_regexp(type_name_subst, impl_name_subst, _ = nil)
|
58
|
+
@type_name_substitutions << type_name_subst
|
59
|
+
@impl_name_substitutions << impl_name_subst
|
70
60
|
nil
|
71
61
|
end
|
72
62
|
|
@@ -74,12 +64,11 @@ module Types
|
|
74
64
|
#
|
75
65
|
# @param type [PAnyType,String] the type or type name
|
76
66
|
# @param impl_module[Module,String] the module or module name
|
77
|
-
|
78
|
-
def register_implementation(type, impl_module, loader)
|
67
|
+
def register_implementation(type, impl_module, _ = nil)
|
79
68
|
type = type.name if type.is_a?(PAnyType)
|
80
69
|
impl_module = impl_module.name if impl_module.is_a?(Module)
|
81
|
-
@type_names_per_implementation[impl_module] =
|
82
|
-
@implementations_per_type_name[type] =
|
70
|
+
@type_names_per_implementation[impl_module] = type
|
71
|
+
@implementations_per_type_name[type] = impl_module
|
83
72
|
nil
|
84
73
|
end
|
85
74
|
|
@@ -89,7 +78,8 @@ module Types
|
|
89
78
|
# @return [String,nil] the name of the implementation module, or `nil` if no mapping was found
|
90
79
|
def module_name_for_type(type)
|
91
80
|
type = type.name if type.is_a?(PAnyType)
|
92
|
-
|
81
|
+
name = @parent.module_name_for_type(type) unless @parent.nil?
|
82
|
+
name.nil? ? find_mapping(type, @implementations_per_type_name, @type_name_substitutions) : name
|
93
83
|
end
|
94
84
|
|
95
85
|
# Find the module that corresponds to the given type or type name
|
@@ -97,18 +87,19 @@ module Types
|
|
97
87
|
# @param type [PAnyType,String] the name of the type
|
98
88
|
# @return [Module,nil] the name of the implementation module, or `nil` if no mapping was found
|
99
89
|
def module_for_type(type)
|
100
|
-
|
90
|
+
name = module_name_for_type(type)
|
101
91
|
# TODO Shouldn't ClassLoader be module specific?
|
102
|
-
|
92
|
+
name.nil? ? nil : ClassLoader.provide(name)
|
103
93
|
end
|
104
94
|
|
105
95
|
# Find the type name and loader that corresponds to the given runtime module or module name
|
106
96
|
#
|
107
97
|
# @param impl_module [Module,String] the implementation class or class name
|
108
|
-
# @return [
|
98
|
+
# @return [String,nil] the name of the type, or `nil` if no mapping was found
|
109
99
|
def type_name_for_module(impl_module)
|
110
100
|
impl_module = impl_module.name if impl_module.is_a?(Module)
|
111
|
-
|
101
|
+
name = @parent.type_name_for_module(impl_module) unless @parent.nil?
|
102
|
+
name.nil? ? find_mapping(impl_module, @type_names_per_implementation, @impl_name_substitutions) : name
|
112
103
|
end
|
113
104
|
|
114
105
|
# Find the name for, and then load, the type that corresponds to the given runtime module or module name
|
@@ -118,20 +109,22 @@ module Types
|
|
118
109
|
# @param impl_module [Module,String] the implementation class or class name
|
119
110
|
# @return [PAnyType,nil] the type, or `nil` if no mapping was found
|
120
111
|
def type_for_module(impl_module)
|
121
|
-
|
122
|
-
if
|
112
|
+
name = type_name_for_module(impl_module)
|
113
|
+
if name.nil?
|
123
114
|
nil
|
124
115
|
else
|
125
|
-
TypeParser.singleton.parse(
|
116
|
+
TypeParser.singleton.parse(name)
|
126
117
|
end
|
127
118
|
end
|
128
119
|
|
120
|
+
private
|
121
|
+
|
129
122
|
def find_mapping(name, names, substitutions)
|
130
123
|
found = names[name]
|
131
124
|
if found.nil?
|
132
125
|
substitutions.each do |subst|
|
133
|
-
substituted = name.sub(*subst
|
134
|
-
return
|
126
|
+
substituted = name.sub(*subst)
|
127
|
+
return substituted unless substituted == name
|
135
128
|
end
|
136
129
|
end
|
137
130
|
found
|
@@ -484,6 +484,7 @@ class PObjectType < PMetaType
|
|
484
484
|
# @api private
|
485
485
|
def create_new_function
|
486
486
|
impl_class = implementation_class
|
487
|
+
return impl_class.create_new_function(self) if impl_class.respond_to?(:create_new_function)
|
487
488
|
|
488
489
|
(param_names, param_types, required_param_count) = parameter_info(impl_class)
|
489
490
|
|
@@ -532,14 +533,13 @@ class PObjectType < PMetaType
|
|
532
533
|
def implementation_class(create = true)
|
533
534
|
if @implementation_class.nil? && create
|
534
535
|
ir = Loaders.implementation_registry
|
535
|
-
|
536
|
-
if
|
536
|
+
class_name = ir.nil? ? nil : ir.module_name_for_type(self)
|
537
|
+
if class_name.nil?
|
537
538
|
# Use generator to create a default implementation
|
538
539
|
@implementation_class = RubyGenerator.new.create_class(self)
|
539
540
|
@implementation_class.class_eval(&@implementation_override) if instance_variable_defined?(:@implementation_override)
|
540
541
|
else
|
541
542
|
# Can the mapping be loaded?
|
542
|
-
class_name = impl_name[0]
|
543
543
|
@implementation_class = ClassLoader.provide(class_name)
|
544
544
|
|
545
545
|
raise Puppet::Error, "Unable to load class #{class_name}" if @implementation_class.nil?
|
@@ -3,7 +3,7 @@ module Types
|
|
3
3
|
class PAbstractTimeDataType < PScalarType
|
4
4
|
# @param from [AbstractTime] lower bound for this type. Nil or :default means unbounded
|
5
5
|
# @param to [AbstractTime] upper bound for this type. Nil or :default means unbounded
|
6
|
-
def initialize(from, to)
|
6
|
+
def initialize(from, to = nil)
|
7
7
|
@from = convert_arg(from, true)
|
8
8
|
@to = convert_arg(to, false)
|
9
9
|
raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{@from}, #{@to}" unless @from <= @to
|
@@ -161,7 +161,7 @@ module Types
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def from_fields(days, hours, minutes, seconds, milliseconds = 0, microseconds = 0, nanoseconds = 0)
|
164
|
-
Time::Timespan.from_fields(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds)
|
164
|
+
Time::Timespan.from_fields(false, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds)
|
165
165
|
end
|
166
166
|
|
167
167
|
def from_string_hash(args_hash)
|
@@ -23,6 +23,10 @@ class PTypeSetType < PMetaType
|
|
23
23
|
@type_set.name_authority
|
24
24
|
end
|
25
25
|
|
26
|
+
def model_loader
|
27
|
+
@type_set.loader
|
28
|
+
end
|
29
|
+
|
26
30
|
def find(typed_name)
|
27
31
|
if typed_name.type == :type && typed_name.name_authority == @type_set.name_authority
|
28
32
|
type = @type_set[typed_name.name]
|
@@ -48,7 +52,7 @@ class PTypeSetType < PMetaType
|
|
48
52
|
TypeFactory.optional(KEY_NAME_AUTHORITY) => Pcore::TYPE_URI,
|
49
53
|
TypeFactory.optional(KEY_NAME) => Pcore::TYPE_QUALIFIED_REFERENCE,
|
50
54
|
TypeFactory.optional(KEY_VERSION) => TYPE_STRING_OR_VERSION,
|
51
|
-
TypeFactory.optional(KEY_TYPES) => TypeFactory.hash_kv(Pcore::TYPE_SIMPLE_TYPE_NAME, PTypeType::DEFAULT, PCollectionType::NOT_EMPTY_SIZE),
|
55
|
+
TypeFactory.optional(KEY_TYPES) => TypeFactory.hash_kv(Pcore::TYPE_SIMPLE_TYPE_NAME, PVariantType.new([PTypeType::DEFAULT, PObjectType::TYPE_OBJECT_I12N]), PCollectionType::NOT_EMPTY_SIZE),
|
52
56
|
TypeFactory.optional(KEY_REFERENCES) => TypeFactory.hash_kv(Pcore::TYPE_SIMPLE_TYPE_NAME, TYPE_TYPE_REFERENCE_I12N, PCollectionType::NOT_EMPTY_SIZE),
|
53
57
|
TypeFactory.optional(KEY_ANNOTATIONS) => TYPE_ANNOTATIONS,
|
54
58
|
})
|
@@ -288,6 +292,25 @@ class PTypeSetType < PMetaType
|
|
288
292
|
types.each do |type_name, value|
|
289
293
|
full_name = "#{@name}::#{type_name}".freeze
|
290
294
|
typed_name = Loader::TypedName.new(:type, full_name, name_auth)
|
295
|
+
if value.is_a?(Model::ResourceDefaultsExpression)
|
296
|
+
# This is actually a <Parent> { <key-value entries> } notation. Convert to a literal hash that contains the parent
|
297
|
+
n = value.type_ref
|
298
|
+
name = n.cased_value
|
299
|
+
entries = []
|
300
|
+
unless name == 'Object' or name == 'TypeSet'
|
301
|
+
if value.operations.any? { |op| op.attribute_name == KEY_PARENT }
|
302
|
+
case Puppet[:strict]
|
303
|
+
when :warning
|
304
|
+
IssueReporter.warning(value, Issues::DUPLICATE_KEY, :key => KEY_PARENT)
|
305
|
+
when :error
|
306
|
+
IssueReporter.error(Puppet::ParseErrorWithIssue, value, Issues::DUPLICATE_KEY, :key => KEY_PARENT)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
entries << Model::KeyedEntry.new(n.locator, n.offset, n.length, KEY_PARENT, n)
|
310
|
+
end
|
311
|
+
value.operations.each { |op| entries << Model::KeyedEntry.new(op.locator, op.offset, op.length, op.attribute_name, op.value_expr) }
|
312
|
+
value = Model::LiteralHash.new(value.locator, value.offset, value.length, entries)
|
313
|
+
end
|
291
314
|
type = Loader::TypeDefinitionInstantiator.create_type(full_name, value, name_auth)
|
292
315
|
loader.set_entry(typed_name, type, value.locator.to_uri(value))
|
293
316
|
types[type_name] = type
|
@@ -158,7 +158,7 @@ class RubyGenerator < TypeFormatter
|
|
158
158
|
ir = Loaders.implementation_registry
|
159
159
|
impl_name = ir.module_name_for_type(type)
|
160
160
|
raise Puppet::Error, "Unable to create an instance of #{type.name}. No mapping exists to runtime object" if impl_name.nil?
|
161
|
-
impl_name
|
161
|
+
impl_name
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
@@ -179,9 +179,8 @@ class RubyGenerator < TypeFormatter
|
|
179
179
|
unless obj.parent.nil?
|
180
180
|
if impl_subst.empty?
|
181
181
|
ir = Loaders.implementation_registry
|
182
|
-
|
183
|
-
raise Puppet::Error, "Unable to create an instance of #{obj.parent.name}. No mapping exists to runtime object" if
|
184
|
-
parent_name = parent_impl[0]
|
182
|
+
parent_name = ir.module_name_for_type(obj.parent)
|
183
|
+
raise Puppet::Error, "Unable to create an instance of #{obj.parent.name}. No mapping exists to runtime object" if parent_name.nil?
|
185
184
|
else
|
186
185
|
parent_name = obj.parent.name.gsub(*impl_subst)
|
187
186
|
end
|
@@ -210,8 +210,6 @@ module TypeFactory
|
|
210
210
|
case args.size
|
211
211
|
when 0
|
212
212
|
PTimestampType::DEFAULT
|
213
|
-
when 1
|
214
|
-
PTimestampType.new(args[0], args[0])
|
215
213
|
else
|
216
214
|
PTimestampType.new(*args)
|
217
215
|
end
|
@@ -221,8 +219,6 @@ module TypeFactory
|
|
221
219
|
case args.size
|
222
220
|
when 0
|
223
221
|
PTimespanType::DEFAULT
|
224
|
-
when 1
|
225
|
-
PTimespanType.new(args[0], args[0])
|
226
222
|
else
|
227
223
|
PTimespanType.new(*args)
|
228
224
|
end
|
@@ -290,7 +290,14 @@ class TypeParser
|
|
290
290
|
|
291
291
|
# @api private
|
292
292
|
def loader_from_context(ast, context)
|
293
|
-
Adapters::LoaderAdapter.loader_for_model_object(ast, nil, context)
|
293
|
+
model_loader = Adapters::LoaderAdapter.loader_for_model_object(ast, nil, context)
|
294
|
+
if context.is_a?(PTypeSetType::TypeSetLoader)
|
295
|
+
# Only swap a given TypeSetLoader for another loader when the other loader is different
|
296
|
+
# from the one associated with the TypeSet expression
|
297
|
+
context.model_loader.equal?(model_loader.parent) ? context : model_loader
|
298
|
+
else
|
299
|
+
model_loader
|
300
|
+
end
|
294
301
|
end
|
295
302
|
|
296
303
|
# @api private
|
@@ -489,9 +496,9 @@ class TypeParser
|
|
489
496
|
end
|
490
497
|
elsif parameters.size != 2
|
491
498
|
raise_invalid_parameters_error('Integer', '1 or 2', parameters.size)
|
492
|
-
|
493
|
-
|
494
|
-
|
499
|
+
else
|
500
|
+
TypeFactory.range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
|
501
|
+
end
|
495
502
|
|
496
503
|
when 'object'
|
497
504
|
raise_invalid_parameters_error('Object', 1, parameters.size) unless parameters.size == 1
|
@@ -529,9 +536,9 @@ class TypeParser
|
|
529
536
|
end
|
530
537
|
elsif parameters.size != 2
|
531
538
|
raise_invalid_parameters_error('Float', '1 or 2', parameters.size)
|
532
|
-
|
533
|
-
|
534
|
-
|
539
|
+
else
|
540
|
+
TypeFactory.float_range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
|
541
|
+
end
|
535
542
|
|
536
543
|
when 'string'
|
537
544
|
size_type =
|
@@ -105,11 +105,11 @@ module Utils
|
|
105
105
|
|
106
106
|
# is the name absolute (i.e. starts with ::)
|
107
107
|
def self.is_absolute? name
|
108
|
-
name.start_with? "::"
|
108
|
+
name.start_with? "::".freeze
|
109
109
|
end
|
110
110
|
|
111
111
|
def self.name_to_segments name
|
112
|
-
name.split("::")
|
112
|
+
name.split("::".freeze)
|
113
113
|
end
|
114
114
|
|
115
115
|
def self.relativize_name name
|
@@ -292,8 +292,8 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
292
292
|
def check_CapabilityMapping(o)
|
293
293
|
ok =
|
294
294
|
case o.component
|
295
|
-
when Model::
|
296
|
-
name = o.component.
|
295
|
+
when Model::QualifiedReference
|
296
|
+
name = o.component.cased_value
|
297
297
|
acceptor.accept(Issues::ILLEGAL_CLASSREF, o.component, {:name=>name}) unless name =~ Patterns::CLASSREF_EXT
|
298
298
|
true
|
299
299
|
when Model::AccessExpression
|
@@ -908,6 +908,10 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
908
908
|
true
|
909
909
|
end
|
910
910
|
|
911
|
+
def idem_MatchExpression(o)
|
912
|
+
false # can have side effect of setting $n match variables
|
913
|
+
end
|
914
|
+
|
911
915
|
def idem_RelationshipExpression(o)
|
912
916
|
# Always side effect
|
913
917
|
false
|