puppet 4.7.1 → 4.8.0
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/Gemfile +0 -3
- data/MAINTAINERS +76 -0
- data/README.md +0 -6
- data/Rakefile +2 -2
- data/lib/puppet/agent.rb +3 -3
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/configurer.rb +2 -2
- data/lib/puppet/data_providers.rb +1 -0
- data/lib/puppet/data_providers/data_adapter.rb +1 -0
- data/lib/puppet/data_providers/data_function_support.rb +1 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +1 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_config.rb +1 -0
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +1 -0
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_support.rb +1 -2
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -0
- data/lib/puppet/defaults.rb +20 -1
- data/lib/puppet/environments.rb +5 -2
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/epp.rb +57 -11
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/functions.rb +23 -24
- data/lib/puppet/functions/alert.rb +14 -0
- data/lib/puppet/functions/binary_file.rb +25 -0
- data/lib/puppet/functions/break.rb +22 -0
- data/lib/puppet/functions/contain.rb +33 -0
- data/lib/puppet/functions/crit.rb +14 -0
- data/lib/puppet/functions/debug.rb +14 -0
- data/lib/puppet/functions/emerg.rb +14 -0
- data/lib/puppet/functions/epp.rb +1 -1
- data/lib/puppet/functions/err.rb +14 -0
- data/lib/puppet/functions/find_file.rb +31 -0
- data/lib/puppet/functions/include.rb +21 -0
- data/lib/puppet/functions/info.rb +14 -0
- data/lib/puppet/functions/new.rb +1 -1
- data/lib/puppet/functions/next.rb +23 -0
- data/lib/puppet/functions/notice.rb +14 -0
- data/lib/puppet/functions/regsubst.rb +12 -16
- data/lib/puppet/functions/require.rb +37 -0
- data/lib/puppet/functions/return.rb +22 -0
- data/lib/puppet/functions/strftime.rb +35 -0
- data/lib/puppet/functions/warning.rb +14 -0
- data/lib/puppet/generate/models/type/type.rb +4 -0
- data/lib/puppet/generate/templates/type/pcore.erb +2 -1
- data/lib/puppet/indirector/face.rb +6 -1
- data/lib/puppet/network/http/error.rb +2 -2
- data/lib/puppet/network/http/handler.rb +2 -2
- data/lib/puppet/node/environment.rb +11 -0
- data/lib/puppet/parser/ast.rb +5 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +17 -4
- data/lib/puppet/parser/compiler.rb +29 -1
- data/lib/puppet/parser/functions.rb +6 -0
- data/lib/puppet/parser/functions/assert_type.rb +1 -1
- data/lib/puppet/parser/functions/binary_file.rb +24 -0
- data/lib/puppet/parser/functions/break.rb +39 -0
- data/lib/puppet/parser/functions/contain.rb +7 -15
- data/lib/puppet/parser/functions/defined.rb +2 -2
- data/lib/puppet/parser/functions/dig.rb +1 -1
- data/lib/puppet/parser/functions/each.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +2 -2
- data/lib/puppet/parser/functions/filter.rb +1 -1
- data/lib/puppet/parser/functions/find_file.rb +28 -0
- data/lib/puppet/parser/functions/hiera.rb +4 -4
- data/lib/puppet/parser/functions/hiera_array.rb +1 -1
- data/lib/puppet/parser/functions/hiera_hash.rb +1 -1
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +4 -8
- data/lib/puppet/parser/functions/inline_epp.rb +1 -1
- data/lib/puppet/parser/functions/lest.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +4 -2
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -1
- data/lib/puppet/parser/functions/new.rb +414 -18
- data/lib/puppet/parser/functions/next.rb +38 -0
- data/lib/puppet/parser/functions/reduce.rb +1 -1
- data/lib/puppet/parser/functions/regsubst.rb +4 -2
- data/lib/puppet/parser/functions/require.rb +4 -27
- data/lib/puppet/parser/functions/return.rb +71 -0
- data/lib/puppet/parser/functions/reverse_each.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +13 -8
- data/lib/puppet/parser/functions/slice.rb +1 -1
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions/step.rb +1 -1
- data/lib/puppet/parser/functions/strftime.rb +185 -0
- data/lib/puppet/parser/functions/then.rb +1 -1
- data/lib/puppet/parser/functions/type.rb +1 -1
- data/lib/puppet/parser/functions/with.rb +3 -3
- data/lib/puppet/parser/resource.rb +8 -5
- data/lib/puppet/parser/scope.rb +1 -1
- data/lib/puppet/plugins/configuration.rb +8 -0
- data/lib/puppet/plugins/data_providers.rb +1 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +7 -28
- data/lib/puppet/plugins/data_providers/registry.rb +1 -0
- data/lib/puppet/pops.rb +4 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +36 -5
- data/lib/puppet/pops/evaluator/closure.rb +81 -12
- data/lib/puppet/pops/evaluator/compare_operator.rb +24 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +29 -5
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +53 -62
- data/lib/puppet/pops/evaluator/runtime3_support.rb +15 -6
- data/lib/puppet/pops/functions/dispatch.rb +9 -2
- data/lib/puppet/pops/functions/dispatcher.rb +3 -1
- data/lib/puppet/pops/functions/function.rb +19 -2
- data/lib/puppet/pops/issues.rb +9 -0
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/loader.rb +17 -0
- data/lib/puppet/pops/loader/static_loader.rb +0 -41
- data/lib/puppet/pops/lookup.rb +12 -0
- data/lib/puppet/pops/lookup/context.rb +86 -0
- data/lib/puppet/pops/lookup/explainer.rb +46 -6
- data/lib/puppet/pops/lookup/invocation.rb +19 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +20 -8
- data/lib/puppet/pops/model/model_label_provider.rb +3 -0
- data/lib/puppet/pops/model/model_meta.rb +2 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +14 -0
- data/lib/puppet/pops/parser/egrammar.ra +11 -6
- data/lib/puppet/pops/parser/eparser.rb +1112 -1086
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -2
- data/lib/puppet/pops/pcore.rb +1 -0
- data/lib/puppet/pops/puppet_stack.rb +3 -3
- data/lib/puppet/pops/resource/param.rb +5 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +8 -4
- data/lib/puppet/pops/resource/resource_type_set.pcore +1 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +19 -2
- data/lib/puppet/pops/serialization/abstract_writer.rb +16 -3
- data/lib/puppet/pops/serialization/deserializer.rb +5 -1
- data/lib/puppet/pops/serialization/extension.rb +2 -0
- data/lib/puppet/pops/serialization/json.rb +76 -26
- data/lib/puppet/pops/serialization/serializer.rb +5 -1
- data/lib/puppet/pops/serialization/time_factory.rb +2 -1
- data/lib/puppet/pops/time/timespan.rb +718 -0
- data/lib/puppet/pops/time/timestamp.rb +148 -0
- data/lib/puppet/pops/types/p_binary_type.rb +220 -0
- data/lib/puppet/pops/types/p_object_type.rb +12 -6
- data/lib/puppet/pops/types/p_sensitive_type.rb +5 -1
- data/lib/puppet/pops/types/p_timespan_type.rb +141 -0
- data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
- data/lib/puppet/pops/types/string_converter.rb +62 -0
- data/lib/puppet/pops/types/type_asserter.rb +1 -1
- data/lib/puppet/pops/types/type_calculator.rb +17 -3
- data/lib/puppet/pops/types/type_factory.rb +35 -1
- data/lib/puppet/pops/types/type_formatter.rb +64 -11
- data/lib/puppet/pops/types/type_mismatch_describer.rb +110 -61
- data/lib/puppet/pops/types/type_parser.rb +18 -4
- data/lib/puppet/pops/types/types.rb +98 -63
- data/lib/puppet/pops/validation.rb +9 -1
- data/lib/puppet/pops/validation/checker4_0.rb +7 -0
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/provider.rb +3 -6
- data/lib/puppet/provider/mcx/mcxcontent.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +18 -4
- data/lib/puppet/provider/nameservice/directoryservice.rb +15 -7
- data/lib/puppet/provider/package/gem.rb +6 -1
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pkg.rb +5 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +10 -0
- data/lib/puppet/provider/service/launchd.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +6 -6
- data/lib/puppet/provider/yumrepo/inifile.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/resource.rb +54 -12
- data/lib/puppet/resource/capability_finder.rb +15 -9
- data/lib/puppet/resource/catalog.rb +25 -6
- data/lib/puppet/resource/type.rb +3 -1
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +12 -4
- data/lib/puppet/syntax_checkers/base64.rb +41 -0
- data/lib/puppet/syntax_checkers/json.rb +0 -2
- data/lib/puppet/transaction.rb +6 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +5 -0
- data/lib/puppet/transaction/report.rb +7 -2
- data/lib/puppet/type.rb +2 -1
- data/lib/puppet/type/file/checksum.rb +1 -0
- data/lib/puppet/type/file/content.rb +4 -4
- data/lib/puppet/type/mount.rb +44 -0
- data/lib/puppet/type/ssh_authorized_key.rb +1 -1
- data/lib/puppet/type/tidy.rb +3 -0
- data/lib/puppet/type/user.rb +12 -6
- data/lib/puppet/util/log.rb +25 -0
- data/lib/puppet/util/plist.rb +8 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_x.rb +7 -1
- data/spec/integration/application/apply_spec.rb +118 -0
- data/spec/integration/parser/compiler_spec.rb +28 -0
- data/spec/integration/parser/pcore_resource_spec.rb +40 -3
- data/spec/integration/provider/mount_spec.rb +2 -1
- data/spec/integration/util/windows/principal_spec.rb +2 -2
- data/spec/integration/util/windows/registry_spec.rb +4 -4
- data/spec/lib/puppet_spec/compiler.rb +5 -1
- data/spec/lib/puppet_spec/unindent.rb +5 -0
- data/spec/shared_contexts/types_setup.rb +6 -0
- data/spec/shared_examples/rhel_package_provider.rb +16 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/agent_spec.rb +11 -0
- data/spec/unit/application/lookup_spec.rb +94 -3
- data/spec/unit/capability_spec.rb +22 -0
- data/spec/unit/configurer_spec.rb +8 -0
- data/spec/unit/face/epp_face_spec.rb +22 -3
- data/spec/unit/functions/assert_type_spec.rb +3 -3
- data/spec/unit/functions/binary_file_spec.rb +46 -0
- data/spec/unit/functions/break_spec.rb +89 -0
- data/spec/unit/{parser/functions → functions}/contain_spec.rb +68 -3
- data/spec/unit/functions/find_file_spec.rb +69 -0
- data/spec/unit/functions/include_spec.rb +175 -0
- data/spec/unit/functions/logging_spec.rb +54 -0
- data/spec/unit/functions/lookup_spec.rb +3 -3
- data/spec/unit/functions/new_spec.rb +105 -5
- data/spec/unit/functions/next_spec.rb +93 -0
- data/spec/unit/functions/require_spec.rb +83 -0
- data/spec/unit/functions/return_spec.rb +105 -0
- data/spec/unit/{parser/functions → functions}/shared.rb +14 -11
- data/spec/unit/functions/strftime_spec.rb +152 -0
- data/spec/unit/functions4_spec.rb +22 -0
- data/spec/unit/indirector/face_spec.rb +10 -2
- data/spec/unit/network/http/error_spec.rb +1 -2
- data/spec/unit/network/http/handler_spec.rb +6 -5
- data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_spec.rb +1 -1
- data/spec/unit/parser/functions/lookup_spec.rb +1 -1
- data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
- data/spec/unit/parser/functions/split_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +81 -1
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +170 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +29 -4
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +112 -4
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +12 -0
- data/spec/unit/pops/loaders/static_loader_spec.rb +0 -26
- data/spec/unit/pops/lookup/context_spec.rb +149 -0
- data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
- data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
- data/spec/unit/pops/puppet_stack_spec.rb +1 -1
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +74 -0
- data/spec/unit/pops/serialization/packer_spec.rb +34 -14
- data/spec/unit/pops/serialization/serialization_spec.rb +67 -5
- data/spec/unit/pops/time/timespan_spec.rb +121 -0
- data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +7 -7
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +1 -1
- data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +13 -13
- data/spec/unit/pops/types/ruby_generator_spec.rb +12 -12
- data/spec/unit/pops/types/string_converter_spec.rb +89 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +3 -3
- data/spec/unit/pops/types/type_calculator_spec.rb +113 -5
- data/spec/unit/pops/types/type_formatter_spec.rb +40 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +49 -38
- data/spec/unit/pops/types/type_parser_spec.rb +87 -4
- data/spec/unit/pops/types/types_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +23 -0
- data/spec/unit/provider/mount/parsed_spec.rb +47 -29
- data/spec/unit/provider/package/pkg_spec.rb +109 -99
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -0
- data/spec/unit/provider/user/aix_spec.rb +1 -1
- data/spec/unit/provider/user/directoryservice_spec.rb +101 -30
- data/spec/unit/resource/capability_finder_spec.rb +29 -7
- data/spec/unit/resource/catalog_spec.rb +127 -0
- data/spec/unit/ssl/certificate_request_spec.rb +1 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +30 -0
- data/spec/unit/transaction/persistence_spec.rb +1 -6
- data/spec/unit/transaction/report_spec.rb +23 -0
- data/spec/unit/transaction_spec.rb +38 -0
- data/spec/unit/type/mount_spec.rb +5 -0
- data/spec/unit/util/plist_spec.rb +14 -2
- metadata +71 -12
- data/spec/integration/parser/functions/require_spec.rb +0 -43
- data/spec/unit/parser/functions/include_spec.rb +0 -55
- data/spec/unit/parser/functions/require_spec.rb +0 -68
data/lib/puppet/version.rb
CHANGED
data/lib/puppet_x.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# The Puppet Extensions Module.
|
2
2
|
#
|
3
|
-
# Submodules of this module should be named after the publisher (e.g.
|
3
|
+
# Submodules of this module should be named after the publisher (e.g.
|
4
|
+
# 'user' part of a Puppet Module name). You should also add the module
|
5
|
+
# name to avoid further conflicts in the same namespace. So the
|
6
|
+
# structure should be
|
7
|
+
# `lib/puppet_x/<namespace>/<module_name>/<extension.rb>`.
|
8
|
+
# A Puppet Extension for 'puppetlabs-powershell' would live at
|
9
|
+
# `lib/puppet_x/puppetlabs/powershell/<extension.rb>`.
|
4
10
|
#
|
5
11
|
# @api public
|
6
12
|
#
|
@@ -309,6 +309,124 @@ end
|
|
309
309
|
expect(logs).to include(match(/doesn't match server specified environment/))
|
310
310
|
end
|
311
311
|
end
|
312
|
+
end
|
313
|
+
|
314
|
+
context 'when compiling a provided catalog with rich data and then applying from file' do
|
315
|
+
include PuppetSpec::Compiler
|
316
|
+
|
317
|
+
let(:env_dir) { tmpdir('environments') }
|
318
|
+
let(:execute) { 'include amod' }
|
319
|
+
let(:rich_data) { false }
|
320
|
+
let(:env_name) { 'spec' }
|
321
|
+
let(:populated_env_dir) do
|
322
|
+
dir_contained_in(env_dir, {
|
323
|
+
env_name => {
|
324
|
+
'modules' => {
|
325
|
+
'amod' => {
|
326
|
+
'manifests' => {
|
327
|
+
'init.pp' => <<-EOF
|
328
|
+
class amod {
|
329
|
+
notify { rx: message => /[Rr]eg[Ee]xp/ }
|
330
|
+
notify { bin: message => Binary('w5ZzdGVuIG1lZCByw7ZzdGVuCg==') }
|
331
|
+
notify { ver: message => SemVer('2.3.1') }
|
332
|
+
notify { vrange: message => SemVerRange('>=2.3.0') }
|
333
|
+
notify { tspan: message => Timespan(3600) }
|
334
|
+
notify { tstamp: message => Timestamp('2012-03-04T18:15:11.001') }
|
335
|
+
}
|
336
|
+
|
337
|
+
class amod::bad_type {
|
338
|
+
notify { bogus: message => amod::bogus() }
|
339
|
+
}
|
340
|
+
EOF
|
341
|
+
},
|
342
|
+
'lib' => {
|
343
|
+
'puppet' => {
|
344
|
+
'functions' => {
|
345
|
+
'amod' => {
|
346
|
+
'bogus.rb' => <<-RUBY
|
347
|
+
# Function that leaks an object that is not recognized in the catalog
|
348
|
+
Puppet::Functions.create_function(:'amod::bogus') do
|
349
|
+
def bogus()
|
350
|
+
Time.new(2016, 10, 6, 23, 51, 14, '+02:00')
|
351
|
+
end
|
352
|
+
end
|
353
|
+
RUBY
|
354
|
+
}
|
355
|
+
}
|
356
|
+
}
|
357
|
+
}
|
358
|
+
}
|
359
|
+
}
|
360
|
+
}
|
361
|
+
})
|
362
|
+
env_dir
|
363
|
+
end
|
364
|
+
|
365
|
+
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, 'spec', 'modules')]) }
|
366
|
+
let(:node) { Puppet::Node.new('test', :environment => env) }
|
367
|
+
|
368
|
+
around(:each) do |example|
|
369
|
+
Puppet[:rich_data] = rich_data
|
370
|
+
Puppet.override(:loaders => Puppet::Pops::Loaders.new(env)) { example.run }
|
371
|
+
end
|
372
|
+
|
373
|
+
context 'and rich_data is set to false during compile' do
|
374
|
+
it 'will notify a string that is the result of Regexp#inspect (from Runtime3xConverter)' do
|
375
|
+
catalog = compile_to_catalog(execute, node)
|
376
|
+
apply = Puppet::Application[:apply]
|
377
|
+
apply.options[:catalog] = file_containing('manifest', catalog.to_pson)
|
378
|
+
apply.expects(:apply_catalog).with do |catalog|
|
379
|
+
catalog.resource(:notify, 'rx')['message'].is_a?(String)
|
380
|
+
catalog.resource(:notify, 'bin')['message'].is_a?(String)
|
381
|
+
catalog.resource(:notify, 'ver')['message'].is_a?(String)
|
382
|
+
catalog.resource(:notify, 'vrange')['message'].is_a?(String)
|
383
|
+
catalog.resource(:notify, 'tspan')['message'].is_a?(String)
|
384
|
+
catalog.resource(:notify, 'tstamp')['message'].is_a?(String)
|
385
|
+
end
|
386
|
+
apply.run
|
387
|
+
end
|
388
|
+
|
389
|
+
it 'will notify a string that is the result of to_s on uknown data types' do
|
390
|
+
logs = []
|
391
|
+
json = Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
392
|
+
compile_to_catalog('include amod::bad_type', node).to_pson
|
393
|
+
end
|
394
|
+
logs = logs.select { |log| log.level == :warning }.map { |log| log.message }
|
395
|
+
expect(logs.empty?).to be_falsey
|
396
|
+
expect(logs[0]).to eql("Resource 'Notify[bogus]' contains a Time value. It will be converted to the String '2016-10-06 23:51:14 +0200'")
|
397
|
+
|
398
|
+
apply = Puppet::Application[:apply]
|
399
|
+
apply.options[:catalog] = file_containing('manifest', json)
|
400
|
+
apply.expects(:apply_catalog).with do |catalog|
|
401
|
+
catalog.resource(:notify, 'bogus')['message'].is_a?(String)
|
402
|
+
end
|
403
|
+
apply.run
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
context 'and rich_data is set to true during compile' do
|
408
|
+
let(:rich_data) { true }
|
409
|
+
|
410
|
+
it 'will notify a regexp using Regexp#to_s' do
|
411
|
+
catalog = compile_to_catalog(execute, node)
|
412
|
+
apply = Puppet::Application[:apply]
|
413
|
+
apply.options[:catalog] = file_containing('manifest', catalog.to_pson)
|
414
|
+
apply.expects(:apply_catalog).with do |catalog|
|
415
|
+
catalog.resource(:notify, 'rx')['message'].is_a?(Regexp)
|
416
|
+
catalog.resource(:notify, 'bin')['message'].is_a?(Puppet::Pops::Types::PBinaryType::Binary)
|
417
|
+
catalog.resource(:notify, 'ver')['message'].is_a?(Semantic::Version)
|
418
|
+
catalog.resource(:notify, 'vrange')['message'].is_a?(Semantic::VersionRange)
|
419
|
+
catalog.resource(:notify, 'tspan')['message'].is_a?(Puppet::Pops::Time::Timespan)
|
420
|
+
catalog.resource(:notify, 'tstamp')['message'].is_a?(Puppet::Pops::Time::Timestamp)
|
421
|
+
end
|
422
|
+
apply.run
|
423
|
+
end
|
424
|
+
|
425
|
+
it 'will raise an error on uknown data types' do
|
426
|
+
catalog = compile_to_catalog('include amod::bad_type', node)
|
427
|
+
expect { catalog.to_pson }.to raise_error(/No Puppet Type found for Time/)
|
428
|
+
end
|
429
|
+
end
|
312
430
|
|
313
431
|
end
|
314
432
|
end
|
@@ -153,6 +153,25 @@ describe Puppet::Parser::Compiler do
|
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
156
|
+
context 'when working with $settings name space' do
|
157
|
+
include PuppetSpec::Compiler
|
158
|
+
it 'makes $settings::strict available as string' do
|
159
|
+
node = Puppet::Node.new("testing")
|
160
|
+
catalog = compile_to_catalog(<<-MANIFEST, node)
|
161
|
+
notify { 'test': message => $settings::strict == 'warning' }
|
162
|
+
MANIFEST
|
163
|
+
expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'can return boolean settings as Boolean' do
|
167
|
+
node = Puppet::Node.new("testing")
|
168
|
+
catalog = compile_to_catalog(<<-MANIFEST, node)
|
169
|
+
notify { 'test': message => $settings::storeconfigs == false }
|
170
|
+
MANIFEST
|
171
|
+
expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
156
175
|
context 'when working with $server_facts' do
|
157
176
|
include PuppetSpec::Compiler
|
158
177
|
context 'and have opted in to trusted_server_facts' do
|
@@ -206,6 +225,15 @@ describe Puppet::Parser::Compiler do
|
|
206
225
|
notify { 'test': message => $server_facts == 'changed' }
|
207
226
|
MANIFEST
|
208
227
|
|
228
|
+
expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
|
229
|
+
end
|
230
|
+
it 'should warn about assignment to $server_facts' do
|
231
|
+
catalog = compile_to_catalog(<<-MANIFEST)
|
232
|
+
$server_facts = 'changed'
|
233
|
+
notify { 'test': message => $server_facts == 'changed' }
|
234
|
+
MANIFEST
|
235
|
+
expect(@logs).to have_matching_log(/Assignment to \$server_facts is deprecated/)
|
236
|
+
|
209
237
|
expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
|
210
238
|
end
|
211
239
|
end
|
@@ -37,9 +37,9 @@ describe 'when pcore described resources types are in use' do
|
|
37
37
|
} }
|
38
38
|
},
|
39
39
|
},
|
40
|
-
'm2' => {
|
40
|
+
'm2' => {
|
41
41
|
'lib' => { 'puppet' => { 'type' => {
|
42
|
-
'test2.rb' => <<-EOF
|
42
|
+
'test2.rb' => <<-EOF,
|
43
43
|
module Puppet
|
44
44
|
Type.newtype(:test2) do
|
45
45
|
@doc = "Docs for resource"
|
@@ -57,6 +57,16 @@ describe 'when pcore described resources types are in use' do
|
|
57
57
|
end
|
58
58
|
end;end
|
59
59
|
EOF
|
60
|
+
'cap.rb' => <<-EOF
|
61
|
+
module Puppet
|
62
|
+
Type.newtype(:cap, :is_capability => true) do
|
63
|
+
@doc = "Docs for capability"
|
64
|
+
@isomorphic = false
|
65
|
+
newproperty(:message) do
|
66
|
+
desc "Docs for 'message' property"
|
67
|
+
end
|
68
|
+
end;end
|
69
|
+
EOF
|
60
70
|
} } },
|
61
71
|
}
|
62
72
|
}}})
|
@@ -102,14 +112,18 @@ describe 'when pcore described resources types are in use' do
|
|
102
112
|
test2 { 'b':
|
103
113
|
message => 'b works'
|
104
114
|
}
|
115
|
+
cap { 'c':
|
116
|
+
message => 'c works'
|
117
|
+
}
|
105
118
|
MANIFEST
|
106
119
|
expect(catalog.resource(:test1, "a")['message']).to eq('a works')
|
107
120
|
expect(catalog.resource(:test2, "b")['message']).to eq('b works')
|
121
|
+
expect(catalog.resource(:cap, "c")['message']).to eq('c works')
|
108
122
|
end
|
109
123
|
|
110
124
|
it 'the validity of attribute names are checked' do
|
111
125
|
genface.types
|
112
|
-
expect do
|
126
|
+
expect do
|
113
127
|
compile_to_catalog(<<-MANIFEST)
|
114
128
|
test1 { 'a':
|
115
129
|
mezzage => 'a works'
|
@@ -129,6 +143,20 @@ describe 'when pcore described resources types are in use' do
|
|
129
143
|
expect(catalog.resource(:test1, "a")['noop']).to eq(true)
|
130
144
|
end
|
131
145
|
|
146
|
+
it 'capability is propagated to the catalog' do
|
147
|
+
genface.types
|
148
|
+
catalog = compile_to_catalog(<<-MANIFEST)
|
149
|
+
test2 { 'r':
|
150
|
+
message => 'a resource'
|
151
|
+
}
|
152
|
+
cap { 'c':
|
153
|
+
message => 'a cap'
|
154
|
+
}
|
155
|
+
MANIFEST
|
156
|
+
expect(catalog.resource(:test2, "r").is_capability?).to eq(false)
|
157
|
+
expect(catalog.resource(:cap, "c").is_capability?).to eq(true)
|
158
|
+
end
|
159
|
+
|
132
160
|
it 'a generated type describes if it is isomorphic' do
|
133
161
|
generate_and_in_a_compilers_context do |compiler|
|
134
162
|
t1 = find_resource_type(compiler.topscope, 'test1')
|
@@ -138,6 +166,15 @@ describe 'when pcore described resources types are in use' do
|
|
138
166
|
end
|
139
167
|
end
|
140
168
|
|
169
|
+
it 'a generated type describes if it is a capability' do
|
170
|
+
generate_and_in_a_compilers_context do |compiler|
|
171
|
+
t1 = find_resource_type(compiler.topscope, 'test1')
|
172
|
+
expect(t1.is_capability?).to be(false)
|
173
|
+
t2 = find_resource_type(compiler.topscope, 'cap')
|
174
|
+
expect(t2.is_capability?).to be(true)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
141
178
|
it 'a generated type returns parameters defined in pcore' do
|
142
179
|
generate_and_in_a_compilers_context do |compiler|
|
143
180
|
t1 = find_resource_type(compiler.topscope, 'test1')
|
@@ -149,9 +149,10 @@ describe "mount provider (integration)", :unless => Puppet.features.microsoft_wi
|
|
149
149
|
pending "Due to bug 6309"
|
150
150
|
@mounted = true
|
151
151
|
@current_device = "/dev/disk2s2"
|
152
|
+
@current_options = "local"
|
152
153
|
create_fake_fstab(true)
|
153
154
|
@desired_options = "local"
|
154
|
-
run_in_catalog(:ensure=>:mounted, :options=>'local')
|
155
|
+
run_in_catalog(:ensure=>:mounted, :options=>'msdos,local')
|
155
156
|
expect(@current_device).to eq("/dev/disk1s1")
|
156
157
|
expect(@mounted).to eq(true)
|
157
158
|
expect(@current_options).to eq('local')
|
@@ -8,7 +8,7 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
|
|
8
8
|
let (:system_bytes) { [1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0] }
|
9
9
|
let (:null_sid_bytes) { bytes = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }
|
10
10
|
let (:administrator_bytes) { [1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0] }
|
11
|
-
let (:computer_sid) { Puppet::Util::Windows::SID.name_to_sid_object(
|
11
|
+
let (:computer_sid) { Puppet::Util::Windows::SID.name_to_sid_object(Socket.gethostname) }
|
12
12
|
# BUILTIN is localized on German Windows, but not French
|
13
13
|
# looking this up like this dilutes the values of the tests as we're comparing two mechanisms
|
14
14
|
# for returning the same values, rather than to a known good
|
@@ -64,7 +64,7 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
|
|
64
64
|
# otherwise running in AppVeyor there is no Administrator and a the current local user can be used
|
65
65
|
skip if (running_as_system && !user_exists)
|
66
66
|
|
67
|
-
hostname =
|
67
|
+
hostname = Socket.gethostname
|
68
68
|
|
69
69
|
principal = Puppet::Util::Windows::SID::Principal.lookup_account_name("#{hostname}\\#{username}")
|
70
70
|
expect(principal.account).to match(/^#{Regexp.quote(username)}$/i)
|
@@ -129,7 +129,7 @@ describe Puppet::Util::Windows::Registry do
|
|
129
129
|
|
130
130
|
let (:hklm) { Win32::Registry::HKEY_LOCAL_MACHINE }
|
131
131
|
let (:puppet_key) { "SOFTWARE\\Puppet Labs"}
|
132
|
-
let (:subkey_name) { "PuppetRegistryTest
|
132
|
+
let (:subkey_name) { "PuppetRegistryTest" }
|
133
133
|
let (:guid) { SecureRandom.uuid }
|
134
134
|
let (:regsam) { Puppet::Util::Windows::Registry::KEY32 }
|
135
135
|
|
@@ -187,7 +187,7 @@ describe Puppet::Util::Windows::Registry do
|
|
187
187
|
context "when reading values" do
|
188
188
|
let (:hklm) { Win32::Registry::HKEY_LOCAL_MACHINE }
|
189
189
|
let (:puppet_key) { "SOFTWARE\\Puppet Labs"}
|
190
|
-
let (:subkey_name) { "PuppetRegistryTest
|
190
|
+
let (:subkey_name) { "PuppetRegistryTest" }
|
191
191
|
let (:value_name) { SecureRandom.uuid }
|
192
192
|
|
193
193
|
after(:each) do
|
@@ -228,7 +228,7 @@ describe Puppet::Util::Windows::Registry do
|
|
228
228
|
context "when reading corrupt values" do
|
229
229
|
let (:hklm) { Win32::Registry::HKEY_LOCAL_MACHINE }
|
230
230
|
let (:puppet_key) { "SOFTWARE\\Puppet Labs"}
|
231
|
-
let (:subkey_name) { "PuppetRegistryTest
|
231
|
+
let (:subkey_name) { "PuppetRegistryTest" }
|
232
232
|
let (:value_name) { SecureRandom.uuid }
|
233
233
|
|
234
234
|
before(:each) do
|
@@ -254,4 +254,4 @@ describe Puppet::Util::Windows::Registry do
|
|
254
254
|
end
|
255
255
|
end
|
256
256
|
end
|
257
|
-
end
|
257
|
+
end
|
@@ -59,8 +59,12 @@ module PuppetSpec::Compiler
|
|
59
59
|
logs
|
60
60
|
end
|
61
61
|
|
62
|
-
def eval_and_collect_notices(code, node = Puppet::Node.new('foonode'))
|
62
|
+
def eval_and_collect_notices(code, node = Puppet::Node.new('foonode'), topscope_vars = {})
|
63
63
|
collect_notices(code, node) do |compiler|
|
64
|
+
unless topscope_vars.empty?
|
65
|
+
scope = compiler.topscope
|
66
|
+
topscope_vars.each {|k,v| scope.setvar(k, v) }
|
67
|
+
end
|
64
68
|
if block_given?
|
65
69
|
compiler.compile do |catalog|
|
66
70
|
yield(compiler.topscope, catalog)
|
@@ -34,6 +34,10 @@ shared_context 'types_setup' do
|
|
34
34
|
Puppet::Pops::Types::PTypeAliasType,
|
35
35
|
Puppet::Pops::Types::PSemVerType,
|
36
36
|
Puppet::Pops::Types::PSemVerRangeType,
|
37
|
+
Puppet::Pops::Types::PTimespanType,
|
38
|
+
Puppet::Pops::Types::PTimestampType,
|
39
|
+
Puppet::Pops::Types::PSensitiveType,
|
40
|
+
Puppet::Pops::Types::PBinaryType,
|
37
41
|
]
|
38
42
|
end
|
39
43
|
|
@@ -51,6 +55,8 @@ shared_context 'types_setup' do
|
|
51
55
|
Puppet::Pops::Types::PEnumType,
|
52
56
|
Puppet::Pops::Types::PSemVerType,
|
53
57
|
Puppet::Pops::Types::PSemVerRangeType,
|
58
|
+
Puppet::Pops::Types::PTimespanType,
|
59
|
+
Puppet::Pops::Types::PTimestampType,
|
54
60
|
]
|
55
61
|
end
|
56
62
|
|
@@ -125,6 +125,22 @@ shared_examples "RHEL package provider" do |provider_class, provider_name|
|
|
125
125
|
provider.stubs(:query).returns(:ensure => current_version).then.returns(:ensure => version)
|
126
126
|
provider.install
|
127
127
|
end
|
128
|
+
it 'should not run upgrade command if absent and ensure latest' do
|
129
|
+
current_version = ''
|
130
|
+
version = '1.2'
|
131
|
+
resource[:ensure] = :latest
|
132
|
+
Puppet::Util::Execution.expects(:execute).with(["/usr/bin/#{provider_name}", '-d', '0', '-e', error_level, '-y', :install, name])
|
133
|
+
provider.stubs(:query).returns(:ensure => current_version).then.returns(:ensure => version)
|
134
|
+
provider.install
|
135
|
+
end
|
136
|
+
it 'should run upgrade command if present and ensure latest' do
|
137
|
+
current_version = '1.0'
|
138
|
+
version = '1.2'
|
139
|
+
resource[:ensure] = :latest
|
140
|
+
Puppet::Util::Execution.expects(:execute).with(["/usr/bin/#{provider_name}", '-d', '0', '-e', error_level, '-y', upgrade_command, name])
|
141
|
+
provider.stubs(:query).returns(:ensure => current_version).then.returns(:ensure => version)
|
142
|
+
provider.install
|
143
|
+
end
|
128
144
|
it 'should accept install options' do
|
129
145
|
resource[:ensure] = :installed
|
130
146
|
resource[:install_options] = ['-t', {'-x' => 'expackage'}]
|
data/spec/spec_helper.rb
CHANGED
data/spec/unit/agent_spec.rb
CHANGED
@@ -63,6 +63,17 @@ describe Puppet::Agent do
|
|
63
63
|
@agent.run
|
64
64
|
end
|
65
65
|
|
66
|
+
it "should initialize the client's transaction_uuid if passed as a client_option" do
|
67
|
+
client = mock 'client'
|
68
|
+
transaction_uuid = 'foo'
|
69
|
+
AgentTestClient.expects(:new).with(anything, transaction_uuid).returns client
|
70
|
+
|
71
|
+
client.expects(:run)
|
72
|
+
|
73
|
+
@agent.stubs(:disabled?).returns false
|
74
|
+
@agent.run(:transaction_uuid => transaction_uuid)
|
75
|
+
end
|
76
|
+
|
66
77
|
it "should be considered running if the lock file is locked" do
|
67
78
|
lockfile = mock 'lockfile'
|
68
79
|
|
@@ -162,12 +162,14 @@ describe Puppet::Application::Lookup do
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
-
it '--explain produces human readable text by default' do
|
165
|
+
it '--explain produces human readable text by default and does not produce output to debug logger' do
|
166
166
|
lookup.options[:node] = node
|
167
167
|
lookup.options[:explain] = true
|
168
168
|
lookup.command_line.stubs(:args).returns(['a'])
|
169
|
+
logs = []
|
169
170
|
begin
|
170
|
-
|
171
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
172
|
+
expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
|
171
173
|
Merge strategy first
|
172
174
|
Data Binding "hiera"
|
173
175
|
No such key: "a"
|
@@ -179,12 +181,54 @@ Merge strategy first
|
|
179
181
|
Found key: "a" value: "This is A"
|
180
182
|
Merged result: "This is A"
|
181
183
|
EXPLANATION
|
184
|
+
end
|
185
|
+
rescue SystemExit => e
|
186
|
+
expect(e.status).to eq(0)
|
187
|
+
end
|
188
|
+
expect(logs.any? { |log| log.level == :debug }).to be_falsey
|
189
|
+
end
|
190
|
+
|
191
|
+
it '--explain produces human readable text by default and --debug produces the same output to debug logger' do
|
192
|
+
lookup.options[:node] = node
|
193
|
+
lookup.options[:explain] = true
|
194
|
+
lookup.command_line.stubs(:args).returns(['a'])
|
195
|
+
Puppet.debug = true
|
196
|
+
logs = []
|
197
|
+
begin
|
198
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
199
|
+
expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
|
200
|
+
Merge strategy first
|
201
|
+
Data Binding "hiera"
|
202
|
+
No such key: "a"
|
203
|
+
Data Provider "Hiera Data Provider, version 4"
|
204
|
+
ConfigurationPath "#{environmentpath}/production/hiera.yaml"
|
205
|
+
Data Provider "common"
|
206
|
+
Path "#{environmentpath}/production/data/common.yaml"
|
207
|
+
Original path: "common"
|
208
|
+
Found key: "a" value: "This is A"
|
209
|
+
Merged result: "This is A"
|
210
|
+
EXPLANATION
|
211
|
+
end
|
182
212
|
rescue SystemExit => e
|
183
213
|
expect(e.status).to eq(0)
|
184
214
|
end
|
215
|
+
logs = logs.select { |log| log.level == :debug }.map { |log| log.message }
|
216
|
+
expect(logs).to include(<<-EXPLANATION.chomp)
|
217
|
+
Lookup of 'a'
|
218
|
+
Merge strategy first
|
219
|
+
Data Binding "hiera"
|
220
|
+
No such key: "a"
|
221
|
+
Data Provider "Hiera Data Provider, version 4"
|
222
|
+
ConfigurationPath "#{environmentpath}/production/hiera.yaml"
|
223
|
+
Data Provider "common"
|
224
|
+
Path "#{environmentpath}/production/data/common.yaml"
|
225
|
+
Original path: "common"
|
226
|
+
Found key: "a" value: "This is A"
|
227
|
+
Merged result: "This is A"
|
228
|
+
EXPLANATION
|
185
229
|
end
|
186
230
|
|
187
|
-
it '--explain produces human readable text of a hash merge
|
231
|
+
it '--explain-options produces human readable text of a hash merge' do
|
188
232
|
lookup.options[:node] = node
|
189
233
|
lookup.options[:explain_options] = true
|
190
234
|
begin
|
@@ -209,6 +253,53 @@ Merge strategy hash
|
|
209
253
|
end
|
210
254
|
end
|
211
255
|
|
256
|
+
it '--explain-options produces human readable text of a hash merge and --debug produces the same output to debug logger' do
|
257
|
+
lookup.options[:node] = node
|
258
|
+
lookup.options[:explain_options] = true
|
259
|
+
Puppet.debug = true
|
260
|
+
logs = []
|
261
|
+
begin
|
262
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
263
|
+
expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
|
264
|
+
Merge strategy hash
|
265
|
+
Data Binding "hiera"
|
266
|
+
No such key: "lookup_options"
|
267
|
+
Data Provider "Hiera Data Provider, version 4"
|
268
|
+
ConfigurationPath "#{environmentpath}/production/hiera.yaml"
|
269
|
+
Data Provider "common"
|
270
|
+
Path "#{environmentpath}/production/data/common.yaml"
|
271
|
+
Original path: "common"
|
272
|
+
Found key: "lookup_options" value: {
|
273
|
+
"a" => "first"
|
274
|
+
}
|
275
|
+
Merged result: {
|
276
|
+
"a" => "first"
|
277
|
+
}
|
278
|
+
EXPLANATION
|
279
|
+
end
|
280
|
+
rescue SystemExit => e
|
281
|
+
expect(e.status).to eq(0)
|
282
|
+
end
|
283
|
+
logs = logs.select { |log| log.level == :debug }.map { |log| log.message }
|
284
|
+
expect(logs).to include(<<-EXPLANATION.chomp)
|
285
|
+
Lookup of '__global__'
|
286
|
+
Merge strategy hash
|
287
|
+
Data Binding "hiera"
|
288
|
+
No such key: "lookup_options"
|
289
|
+
Data Provider "Hiera Data Provider, version 4"
|
290
|
+
ConfigurationPath "#{environmentpath}/production/hiera.yaml"
|
291
|
+
Data Provider "common"
|
292
|
+
Path "#{environmentpath}/production/data/common.yaml"
|
293
|
+
Original path: "common"
|
294
|
+
Found key: "lookup_options" value: {
|
295
|
+
"a" => "first"
|
296
|
+
}
|
297
|
+
Merged result: {
|
298
|
+
"a" => "first"
|
299
|
+
}
|
300
|
+
EXPLANATION
|
301
|
+
end
|
302
|
+
|
212
303
|
it '--explain produces human readable text of a hash merge when using both --explain and --explain-options' do
|
213
304
|
lookup.options[:node] = node
|
214
305
|
lookup.options[:explain] = true
|