puppet 4.4.2 → 4.5.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/CONTRIBUTING.md +5 -5
- data/Gemfile +2 -2
- data/LICENSE +2 -2
- data/README.md +5 -0
- data/ext/project_data.yaml +2 -0
- data/lib/hiera_puppet.rb +6 -14
- data/lib/puppet/application/agent.rb +2 -3
- data/lib/puppet/data_providers/hiera_config.rb +2 -4
- data/lib/puppet/data_providers/hiera_interpolate.rb +12 -154
- data/lib/puppet/data_providers/json_data_provider_factory.rb +0 -7
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -8
- data/lib/puppet/defaults.rb +70 -7
- data/lib/puppet/functions.rb +69 -0
- data/lib/puppet/functions/dig.rb +39 -0
- data/lib/puppet/functions/lest.rb +53 -0
- data/lib/puppet/functions/lookup.rb +40 -27
- data/lib/puppet/functions/new.rb +502 -0
- data/lib/puppet/functions/regsubst.rb +11 -10
- data/lib/puppet/functions/then.rb +74 -0
- data/lib/puppet/functions/type.rb +4 -4
- data/lib/puppet/functions/with.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +2 -0
- data/lib/puppet/indirector/resource_type/parser.rb +5 -0
- data/lib/puppet/indirector/rest.rb +5 -1
- data/lib/puppet/loaders.rb +2 -0
- data/lib/puppet/metatype/manager.rb +19 -2
- data/lib/puppet/module_tool/applications/application.rb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +6 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +19 -4
- data/lib/puppet/module_tool/skeleton/templates/generator/{tests → examples}/init.pp.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +0 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +6 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +20 -3
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +24 -2
- data/lib/puppet/parser/e4_parser_adapter.rb +13 -12
- data/lib/puppet/parser/environment_compiler.rb +2 -2
- data/lib/puppet/parser/resource.rb +14 -5
- data/lib/puppet/parser/scope.rb +18 -15
- data/lib/puppet/plugins/data_providers/data_provider.rb +19 -8
- data/lib/puppet/pops.rb +6 -0
- data/lib/puppet/pops/adapters.rb +5 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +52 -14
- data/lib/puppet/pops/evaluator/compare_operator.rb +34 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +75 -22
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +7 -6
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +13 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +14 -4
- data/lib/puppet/pops/functions/dispatcher.rb +1 -1
- data/lib/puppet/pops/issues.rb +18 -2
- data/lib/puppet/pops/loader/base_loader.rb +48 -7
- data/lib/puppet/pops/loader/dependency_loader.rb +27 -2
- data/lib/puppet/pops/loader/loader.rb +12 -0
- data/lib/puppet/pops/loader/predefined_loader.rb +29 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +57 -0
- data/lib/puppet/pops/loader/static_loader.rb +92 -5
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +25 -3
- data/lib/puppet/pops/loaders.rb +84 -14
- data/lib/puppet/pops/lookup/explainer.rb +38 -1
- data/lib/puppet/pops/lookup/interpolation.rb +115 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +86 -0
- data/lib/puppet/pops/model/ast_transformer.rb +8 -1
- data/lib/puppet/pops/model/factory.rb +31 -8
- data/lib/puppet/pops/model/model.rb +8 -0
- data/lib/puppet/pops/model/model_label_provider.rb +1 -0
- data/lib/puppet/pops/model/model_meta.rb +7 -1
- data/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
- data/lib/puppet/pops/parser/egrammar.ra +24 -7
- data/lib/puppet/pops/parser/eparser.rb +863 -798
- data/lib/puppet/pops/parser/evaluating_parser.rb +4 -0
- data/lib/puppet/pops/parser/locator.rb +8 -4
- data/lib/puppet/pops/pcore.rb +30 -0
- data/lib/puppet/pops/types/class_loader.rb +2 -4
- data/lib/puppet/pops/types/implementation_registry.rb +146 -0
- data/lib/puppet/pops/types/iterable.rb +4 -4
- data/lib/puppet/pops/types/p_object_type.rb +846 -0
- data/lib/puppet/pops/types/p_runtime_type.rb +102 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +164 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +113 -0
- data/lib/puppet/pops/types/puppet_object.rb +21 -0
- data/lib/puppet/pops/types/ruby_generator.rb +258 -0
- data/lib/puppet/pops/types/string_converter.rb +922 -0
- data/lib/puppet/pops/types/type_calculator.rb +29 -5
- data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
- data/lib/puppet/pops/types/type_factory.rb +49 -16
- data/lib/puppet/pops/types/type_formatter.rb +335 -112
- data/lib/puppet/pops/types/type_mismatch_describer.rb +110 -29
- data/lib/puppet/pops/types/type_parser.rb +205 -197
- data/lib/puppet/pops/types/types.rb +481 -103
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +66 -4
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/visitor.rb +3 -1
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +64 -20
- data/lib/puppet/provider/package/rpm.rb +112 -0
- data/lib/puppet/provider/package/yum.rb +7 -68
- data/lib/puppet/provider/service/daemontools.rb +3 -3
- data/lib/puppet/provider/service/init.rb +4 -2
- data/lib/puppet/provider/service/runit.rb +3 -3
- data/lib/puppet/provider/service/smf.rb +6 -3
- data/lib/puppet/provider/service/systemd.rb +59 -73
- data/lib/puppet/reference/providers.rb +1 -2
- data/lib/puppet/resource.rb +54 -37
- data/lib/puppet/resource/catalog.rb +31 -29
- data/lib/puppet/resource/type_collection.rb +23 -8
- data/lib/puppet/settings.rb +4 -2
- data/lib/puppet/settings/base_setting.rb +9 -3
- data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
- data/lib/puppet/test/test_helper.rb +0 -1
- data/lib/puppet/type.rb +9 -3
- data/lib/puppet/type/exec.rb +17 -17
- data/lib/puppet/type/file.rb +12 -0
- data/lib/puppet/type/file/content.rb +6 -6
- data/lib/puppet/type/file/ensure.rb +4 -4
- data/lib/puppet/type/file/source.rb +4 -4
- data/lib/puppet/type/file/target.rb +2 -2
- data/lib/puppet/type/mount.rb +18 -1
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/schedule.rb +4 -4
- data/lib/puppet/type/service.rb +15 -0
- data/lib/puppet/type/sshkey.rb +5 -3
- data/lib/puppet/type/tidy.rb +3 -3
- data/lib/puppet/type/zone.rb +5 -5
- data/lib/puppet/util/feature.rb +1 -1
- data/lib/puppet/util/monkey_patches.rb +8 -0
- data/lib/puppet/util/network_device/cisco/device.rb +16 -6
- data/lib/puppet/util/network_device/cisco/interface.rb +5 -6
- data/lib/puppet/util/plist.rb +3 -3
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +13 -0
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +2 -1
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +2 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +6 -0
- data/spec/fixtures/unit/provider/service/smf/svcs.out +4 -3
- data/spec/integration/module_tool/tar/mini_spec.rb +27 -27
- data/spec/integration/parser/catalog_spec.rb +14 -2
- data/spec/integration/parser/compiler_spec.rb +94 -3
- data/spec/integration/parser/resource_expressions_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +8 -0
- data/spec/lib/puppet_spec/compiler.rb +11 -4
- data/spec/shared_contexts/types_setup.rb +4 -0
- data/spec/unit/application/lookup_spec.rb +91 -9
- data/spec/unit/appmgmt_spec.rb +44 -35
- data/spec/unit/capability_spec.rb +33 -53
- data/spec/unit/data_providers/function_data_provider_spec.rb +19 -1
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +1 -1
- data/spec/unit/defaults_spec.rb +18 -0
- data/spec/unit/functions/assert_type_spec.rb +1 -1
- data/spec/unit/functions/dig_spec.rb +58 -0
- data/spec/unit/functions/lest_spec.rb +34 -0
- data/spec/unit/functions/lookup_spec.rb +108 -2
- data/spec/unit/functions/new_spec.rb +543 -0
- data/spec/unit/functions/regsubst_spec.rb +8 -0
- data/spec/unit/functions/then_spec.rb +40 -0
- data/spec/unit/functions4_spec.rb +78 -10
- data/spec/unit/hiera_puppet_spec.rb +49 -8
- data/spec/unit/indirector/resource_type/parser_spec.rb +5 -0
- data/spec/unit/indirector/rest_spec.rb +12 -0
- data/spec/unit/network/http/api/master/v3/environment_spec.rb +60 -0
- data/spec/unit/node/environment_spec.rb +10 -0
- data/spec/unit/parser/compiler_spec.rb +20 -1
- data/spec/unit/parser/functions/create_resources_spec.rb +2 -2
- data/spec/unit/parser/functions/shared.rb +1 -1
- data/spec/unit/parser/resource_spec.rb +8 -1
- data/spec/unit/parser/scope_spec.rb +45 -0
- data/spec/unit/pops/evaluator/access_ops_spec.rb +14 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +13 -5
- data/spec/unit/pops/loaders/static_loader_spec.rb +92 -1
- data/spec/unit/{data_providers/hiera_interpolation_spec.rb → pops/lookup/interpolation_spec.rb} +7 -5
- data/spec/unit/pops/parser/lexer2_spec.rb +2 -9
- data/spec/unit/pops/parser/parse_application_spec.rb +3 -8
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +19 -0
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +3 -10
- data/spec/unit/pops/parser/parse_site_spec.rb +19 -10
- data/spec/unit/pops/parser/parser_rspec_helper.rb +0 -4
- data/spec/unit/pops/types/enumeration_spec.rb +13 -12
- data/spec/unit/pops/types/iterable_spec.rb +2 -2
- data/spec/unit/pops/types/p_object_type_spec.rb +1060 -0
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +285 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +19 -17
- data/spec/unit/pops/types/ruby_generator_spec.rb +261 -0
- data/spec/unit/pops/types/string_converter_spec.rb +904 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +430 -406
- data/spec/unit/pops/types/type_factory_spec.rb +119 -104
- data/spec/unit/pops/types/type_formatter_spec.rb +73 -6
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
- data/spec/unit/pops/types/type_parser_spec.rb +54 -15
- data/spec/unit/pops/types/types_spec.rb +113 -8
- data/spec/unit/pops/validator/validator_spec.rb +84 -10
- data/spec/unit/provider/package/pip3_spec.rb +9 -270
- data/spec/unit/provider/package/pip_spec.rb +85 -30
- data/spec/unit/provider/package/rpm_spec.rb +160 -3
- data/spec/unit/provider/package/yum_spec.rb +23 -134
- data/spec/unit/provider/service/smf_spec.rb +14 -2
- data/spec/unit/provider/service/systemd_spec.rb +33 -41
- data/spec/unit/resource/capability_finder_spec.rb +10 -2
- data/spec/unit/settings/file_setting_spec.rb +6 -0
- data/spec/unit/transaction/additional_resource_generator_spec.rb +80 -65
- data/spec/unit/type/mount_spec.rb +51 -10
- data/spec/unit/type/service_spec.rb +16 -0
- data/spec/unit/type_spec.rb +14 -0
- data/spec/unit/util/feature_spec.rb +1 -1
- data/spec/unit/util/monkey_patches_spec.rb +60 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
- metadata +63 -11
- data/lib/puppet/pops/types/types_meta.rb +0 -0
- data/spec/integration/provider/package_spec.rb +0 -35
@@ -12,6 +12,7 @@ describe provider_class do
|
|
12
12
|
chkconfig 0 1.3.30.2 2.el5 x86_64
|
13
13
|
myresource 0 1.2.3.4 5.el4 noarch
|
14
14
|
mysummaryless 0 1.2.3.4 5.el4 noarch
|
15
|
+
tomcat 1 1.2.3.4 5.el4 x86_64
|
15
16
|
RPM_OUTPUT
|
16
17
|
end
|
17
18
|
|
@@ -116,7 +117,18 @@ describe provider_class do
|
|
116
117
|
:ensure => "1.3.30.2-2.el5",
|
117
118
|
}
|
118
119
|
)
|
119
|
-
expect(installed_packages.
|
120
|
+
expect(installed_packages[3].properties).to eq(
|
121
|
+
{
|
122
|
+
:provider => :rpm,
|
123
|
+
:name => "myresource",
|
124
|
+
:epoch => "0",
|
125
|
+
:version => "1.2.3.4",
|
126
|
+
:release => "5.el4",
|
127
|
+
:arch => "noarch",
|
128
|
+
:ensure => "1.2.3.4-5.el4",
|
129
|
+
}
|
130
|
+
)
|
131
|
+
expect(installed_packages[4].properties).to eq(
|
120
132
|
{
|
121
133
|
:provider => :rpm,
|
122
134
|
:name => "mysummaryless",
|
@@ -127,6 +139,17 @@ describe provider_class do
|
|
127
139
|
:ensure => "1.2.3.4-5.el4",
|
128
140
|
}
|
129
141
|
)
|
142
|
+
expect(installed_packages[5].properties).to eq(
|
143
|
+
{
|
144
|
+
:provider => :rpm,
|
145
|
+
:name => "tomcat",
|
146
|
+
:epoch => "1",
|
147
|
+
:version => "1.2.3.4",
|
148
|
+
:release => "5.el4",
|
149
|
+
:arch => "x86_64",
|
150
|
+
:ensure => "1:1.2.3.4-5.el4",
|
151
|
+
}
|
152
|
+
)
|
130
153
|
end
|
131
154
|
end
|
132
155
|
|
@@ -257,7 +280,7 @@ describe provider_class do
|
|
257
280
|
:release => 'release',
|
258
281
|
:arch => 'arch',
|
259
282
|
:provider => :rpm,
|
260
|
-
:ensure => 'version-release',
|
283
|
+
:ensure => 'epoch:version-release',
|
261
284
|
}
|
262
285
|
end
|
263
286
|
let(:line) { 'name epoch version release arch' }
|
@@ -269,7 +292,7 @@ describe provider_class do
|
|
269
292
|
line.gsub(field, delimiter),
|
270
293
|
package_hash.merge(
|
271
294
|
field.to_sym => delimiter,
|
272
|
-
:ensure => 'version-release'.gsub(field, delimiter)
|
295
|
+
:ensure => 'epoch:version-release'.gsub(field, delimiter)
|
273
296
|
)
|
274
297
|
)
|
275
298
|
end
|
@@ -481,4 +504,138 @@ describe provider_class do
|
|
481
504
|
it { expect(provider.rpmvercmp("1", "0")).to eq(1) }
|
482
505
|
end
|
483
506
|
|
507
|
+
describe 'package evr parsing' do
|
508
|
+
|
509
|
+
it 'should parse full simple evr' do
|
510
|
+
v = provider.rpm_parse_evr('0:1.2.3-4.el5')
|
511
|
+
expect(v[:epoch]).to eq('0')
|
512
|
+
expect(v[:version]).to eq('1.2.3')
|
513
|
+
expect(v[:release]).to eq('4.el5')
|
514
|
+
end
|
515
|
+
|
516
|
+
it 'should parse version only' do
|
517
|
+
v = provider.rpm_parse_evr('1.2.3')
|
518
|
+
expect(v[:epoch]).to eq(nil)
|
519
|
+
expect(v[:version]).to eq('1.2.3')
|
520
|
+
expect(v[:release]).to eq(nil)
|
521
|
+
end
|
522
|
+
|
523
|
+
it 'should parse version-release' do
|
524
|
+
v = provider.rpm_parse_evr('1.2.3-4.5.el6')
|
525
|
+
expect(v[:epoch]).to eq(nil)
|
526
|
+
expect(v[:version]).to eq('1.2.3')
|
527
|
+
expect(v[:release]).to eq('4.5.el6')
|
528
|
+
end
|
529
|
+
|
530
|
+
it 'should parse release with git hash' do
|
531
|
+
v = provider.rpm_parse_evr('1.2.3-4.1234aefd')
|
532
|
+
expect(v[:epoch]).to eq(nil)
|
533
|
+
expect(v[:version]).to eq('1.2.3')
|
534
|
+
expect(v[:release]).to eq('4.1234aefd')
|
535
|
+
end
|
536
|
+
|
537
|
+
it 'should parse single integer versions' do
|
538
|
+
v = provider.rpm_parse_evr('12345')
|
539
|
+
expect(v[:epoch]).to eq(nil)
|
540
|
+
expect(v[:version]).to eq('12345')
|
541
|
+
expect(v[:release]).to eq(nil)
|
542
|
+
end
|
543
|
+
|
544
|
+
it 'should parse text in the epoch to 0' do
|
545
|
+
v = provider.rpm_parse_evr('foo0:1.2.3-4')
|
546
|
+
expect(v[:epoch]).to eq(nil)
|
547
|
+
expect(v[:version]).to eq('1.2.3')
|
548
|
+
expect(v[:release]).to eq('4')
|
549
|
+
end
|
550
|
+
|
551
|
+
it 'should parse revisions with text' do
|
552
|
+
v = provider.rpm_parse_evr('1.2.3-SNAPSHOT20140107')
|
553
|
+
expect(v[:epoch]).to eq(nil)
|
554
|
+
expect(v[:version]).to eq('1.2.3')
|
555
|
+
expect(v[:release]).to eq('SNAPSHOT20140107')
|
556
|
+
end
|
557
|
+
|
558
|
+
# test cases for PUP-682
|
559
|
+
it 'should parse revisions with text and numbers' do
|
560
|
+
v = provider.rpm_parse_evr('2.2-SNAPSHOT20121119105647')
|
561
|
+
expect(v[:epoch]).to eq(nil)
|
562
|
+
expect(v[:version]).to eq('2.2')
|
563
|
+
expect(v[:release]).to eq('SNAPSHOT20121119105647')
|
564
|
+
end
|
565
|
+
|
566
|
+
end
|
567
|
+
|
568
|
+
describe 'rpm evr comparison' do
|
569
|
+
|
570
|
+
# currently passing tests
|
571
|
+
it 'should evaluate identical version-release as equal' do
|
572
|
+
v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => '1.el5'},
|
573
|
+
{:epoch => '0', :version => '1.2.3', :release => '1.el5'})
|
574
|
+
expect(v).to eq(0)
|
575
|
+
end
|
576
|
+
|
577
|
+
it 'should evaluate identical version as equal' do
|
578
|
+
v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => nil},
|
579
|
+
{:epoch => '0', :version => '1.2.3', :release => nil})
|
580
|
+
expect(v).to eq(0)
|
581
|
+
end
|
582
|
+
|
583
|
+
it 'should evaluate identical version but older release as less' do
|
584
|
+
v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => '1.el5'},
|
585
|
+
{:epoch => '0', :version => '1.2.3', :release => '2.el5'})
|
586
|
+
expect(v).to eq(-1)
|
587
|
+
end
|
588
|
+
|
589
|
+
it 'should evaluate identical version but newer release as greater' do
|
590
|
+
v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => '3.el5'},
|
591
|
+
{:epoch => '0', :version => '1.2.3', :release => '2.el5'})
|
592
|
+
expect(v).to eq(1)
|
593
|
+
end
|
594
|
+
|
595
|
+
it 'should evaluate a newer epoch as greater' do
|
596
|
+
v = provider.rpm_compareEVR({:epoch => '1', :version => '1.2.3', :release => '4.5'},
|
597
|
+
{:epoch => '0', :version => '1.2.3', :release => '4.5'})
|
598
|
+
expect(v).to eq(1)
|
599
|
+
end
|
600
|
+
|
601
|
+
# these tests describe PUP-1244 logic yet to be implemented
|
602
|
+
it 'should evaluate any version as equal to the same version followed by release' do
|
603
|
+
v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => nil},
|
604
|
+
{:epoch => '0', :version => '1.2.3', :release => '2.el5'})
|
605
|
+
expect(v).to eq(0)
|
606
|
+
end
|
607
|
+
|
608
|
+
# test cases for PUP-682
|
609
|
+
it 'should evaluate same-length numeric revisions numerically' do
|
610
|
+
expect(provider.rpm_compareEVR({:epoch => '0', :version => '2.2', :release => '405'},
|
611
|
+
{:epoch => '0', :version => '2.2', :release => '406'})).to eq(-1)
|
612
|
+
end
|
613
|
+
|
614
|
+
end
|
615
|
+
|
616
|
+
describe 'version segment comparison' do
|
617
|
+
|
618
|
+
it 'should treat two nil values as equal' do
|
619
|
+
v = provider.compare_values(nil, nil)
|
620
|
+
expect(v).to eq(0)
|
621
|
+
end
|
622
|
+
|
623
|
+
it 'should treat a nil value as less than a non-nil value' do
|
624
|
+
v = provider.compare_values(nil, '0')
|
625
|
+
expect(v).to eq(-1)
|
626
|
+
end
|
627
|
+
|
628
|
+
it 'should treat a non-nil value as greater than a nil value' do
|
629
|
+
v = provider.compare_values('0', nil)
|
630
|
+
expect(v).to eq(1)
|
631
|
+
end
|
632
|
+
|
633
|
+
it 'should pass two non-nil values on to rpmvercmp' do
|
634
|
+
provider.stubs(:rpmvercmp) { 0 }
|
635
|
+
provider.expects(:rpmvercmp).with('s1', 's2')
|
636
|
+
provider.compare_values('s1', 's2')
|
637
|
+
end
|
638
|
+
|
639
|
+
end
|
640
|
+
|
484
641
|
end
|
@@ -21,6 +21,21 @@ describe provider_class do
|
|
21
21
|
provider
|
22
22
|
end
|
23
23
|
|
24
|
+
let(:arch) { 'x86_64' }
|
25
|
+
let(:arch_resource) do
|
26
|
+
Puppet::Type.type(:package).new(
|
27
|
+
:name => "#{name}.#{arch}",
|
28
|
+
:ensure => :installed,
|
29
|
+
:provider => 'yum'
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
let(:arch_provider) do
|
34
|
+
provider = provider_class.new
|
35
|
+
provider.resource = arch_resource
|
36
|
+
provider
|
37
|
+
end
|
38
|
+
|
24
39
|
before do
|
25
40
|
provider_class.stubs(:command).with(:cmd).returns('/usr/bin/yum')
|
26
41
|
provider.stubs(:rpm).returns 'rpm'
|
@@ -42,140 +57,6 @@ describe provider_class do
|
|
42
57
|
end
|
43
58
|
end
|
44
59
|
|
45
|
-
describe 'package evr parsing' do
|
46
|
-
|
47
|
-
it 'should parse full simple evr' do
|
48
|
-
v = provider.yum_parse_evr('0:1.2.3-4.el5')
|
49
|
-
expect(v[:epoch]).to eq('0')
|
50
|
-
expect(v[:version]).to eq('1.2.3')
|
51
|
-
expect(v[:release]).to eq('4.el5')
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should parse version only' do
|
55
|
-
v = provider.yum_parse_evr('1.2.3')
|
56
|
-
expect(v[:epoch]).to eq('0')
|
57
|
-
expect(v[:version]).to eq('1.2.3')
|
58
|
-
expect(v[:release]).to eq(nil)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'should parse version-release' do
|
62
|
-
v = provider.yum_parse_evr('1.2.3-4.5.el6')
|
63
|
-
expect(v[:epoch]).to eq('0')
|
64
|
-
expect(v[:version]).to eq('1.2.3')
|
65
|
-
expect(v[:release]).to eq('4.5.el6')
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'should parse release with git hash' do
|
69
|
-
v = provider.yum_parse_evr('1.2.3-4.1234aefd')
|
70
|
-
expect(v[:epoch]).to eq('0')
|
71
|
-
expect(v[:version]).to eq('1.2.3')
|
72
|
-
expect(v[:release]).to eq('4.1234aefd')
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'should parse single integer versions' do
|
76
|
-
v = provider.yum_parse_evr('12345')
|
77
|
-
expect(v[:epoch]).to eq('0')
|
78
|
-
expect(v[:version]).to eq('12345')
|
79
|
-
expect(v[:release]).to eq(nil)
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'should parse text in the epoch to 0' do
|
83
|
-
v = provider.yum_parse_evr('foo0:1.2.3-4')
|
84
|
-
expect(v[:epoch]).to eq('0')
|
85
|
-
expect(v[:version]).to eq('1.2.3')
|
86
|
-
expect(v[:release]).to eq('4')
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'should parse revisions with text' do
|
90
|
-
v = provider.yum_parse_evr('1.2.3-SNAPSHOT20140107')
|
91
|
-
expect(v[:epoch]).to eq('0')
|
92
|
-
expect(v[:version]).to eq('1.2.3')
|
93
|
-
expect(v[:release]).to eq('SNAPSHOT20140107')
|
94
|
-
end
|
95
|
-
|
96
|
-
# test cases for PUP-682
|
97
|
-
it 'should parse revisions with text and numbers' do
|
98
|
-
v = provider.yum_parse_evr('2.2-SNAPSHOT20121119105647')
|
99
|
-
expect(v[:epoch]).to eq('0')
|
100
|
-
expect(v[:version]).to eq('2.2')
|
101
|
-
expect(v[:release]).to eq('SNAPSHOT20121119105647')
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
describe 'yum evr comparison' do
|
107
|
-
|
108
|
-
# currently passing tests
|
109
|
-
it 'should evaluate identical version-release as equal' do
|
110
|
-
v = provider.yum_compareEVR({:epoch => '0', :version => '1.2.3', :release => '1.el5'},
|
111
|
-
{:epoch => '0', :version => '1.2.3', :release => '1.el5'})
|
112
|
-
expect(v).to eq(0)
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'should evaluate identical version as equal' do
|
116
|
-
v = provider.yum_compareEVR({:epoch => '0', :version => '1.2.3', :release => nil},
|
117
|
-
{:epoch => '0', :version => '1.2.3', :release => nil})
|
118
|
-
expect(v).to eq(0)
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'should evaluate identical version but older release as less' do
|
122
|
-
v = provider.yum_compareEVR({:epoch => '0', :version => '1.2.3', :release => '1.el5'},
|
123
|
-
{:epoch => '0', :version => '1.2.3', :release => '2.el5'})
|
124
|
-
expect(v).to eq(-1)
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'should evaluate identical version but newer release as greater' do
|
128
|
-
v = provider.yum_compareEVR({:epoch => '0', :version => '1.2.3', :release => '3.el5'},
|
129
|
-
{:epoch => '0', :version => '1.2.3', :release => '2.el5'})
|
130
|
-
expect(v).to eq(1)
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'should evaluate a newer epoch as greater' do
|
134
|
-
v = provider.yum_compareEVR({:epoch => '1', :version => '1.2.3', :release => '4.5'},
|
135
|
-
{:epoch => '0', :version => '1.2.3', :release => '4.5'})
|
136
|
-
expect(v).to eq(1)
|
137
|
-
end
|
138
|
-
|
139
|
-
# these tests describe PUP-1244 logic yet to be implemented
|
140
|
-
it 'should evaluate any version as equal to the same version followed by release' do
|
141
|
-
v = provider.yum_compareEVR({:epoch => '0', :version => '1.2.3', :release => nil},
|
142
|
-
{:epoch => '0', :version => '1.2.3', :release => '2.el5'})
|
143
|
-
expect(v).to eq(0)
|
144
|
-
end
|
145
|
-
|
146
|
-
# test cases for PUP-682
|
147
|
-
it 'should evaluate same-length numeric revisions numerically' do
|
148
|
-
expect(provider.yum_compareEVR({:epoch => '0', :version => '2.2', :release => '405'},
|
149
|
-
{:epoch => '0', :version => '2.2', :release => '406'})).to eq(-1)
|
150
|
-
end
|
151
|
-
|
152
|
-
end
|
153
|
-
|
154
|
-
describe 'yum version segment comparison' do
|
155
|
-
|
156
|
-
it 'should treat two nil values as equal' do
|
157
|
-
v = provider.compare_values(nil, nil)
|
158
|
-
expect(v).to eq(0)
|
159
|
-
end
|
160
|
-
|
161
|
-
it 'should treat a nil value as less than a non-nil value' do
|
162
|
-
v = provider.compare_values(nil, '0')
|
163
|
-
expect(v).to eq(-1)
|
164
|
-
end
|
165
|
-
|
166
|
-
it 'should treat a non-nil value as greater than a nil value' do
|
167
|
-
v = provider.compare_values('0', nil)
|
168
|
-
expect(v).to eq(1)
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'should pass two non-nil values on to rpmvercmp' do
|
172
|
-
provider.stubs(:rpmvercmp) { 0 }
|
173
|
-
provider.expects(:rpmvercmp).with('s1', 's2')
|
174
|
-
provider.compare_values('s1', 's2')
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
60
|
describe 'when installing' do
|
180
61
|
before(:each) do
|
181
62
|
Puppet::Util.stubs(:which).with("rpm").returns("/bin/rpm")
|
@@ -249,6 +130,14 @@ describe provider_class do
|
|
249
130
|
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, name])
|
250
131
|
provider.install
|
251
132
|
end
|
133
|
+
|
134
|
+
it 'moves architecture to end of version' do
|
135
|
+
version = '1.2.3'
|
136
|
+
arch_resource[:ensure] = version
|
137
|
+
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "#{name}-#{version}.#{arch}"])
|
138
|
+
arch_provider.stubs(:query).returns :ensure => version
|
139
|
+
arch_provider.install
|
140
|
+
end
|
252
141
|
end
|
253
142
|
|
254
143
|
describe 'when uninstalling' do
|
@@ -28,12 +28,13 @@ describe provider_class, :if => Puppet.features.posix? do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should get a list of services (excluding legacy)" do
|
31
|
-
provider_class.expects(:svcs).with('-H').returns File.read(my_fixture('svcs.out'))
|
31
|
+
provider_class.expects(:svcs).with('-H', '-o', 'state,fmri').returns File.read(my_fixture('svcs.out'))
|
32
32
|
instances = provider_class.instances.map { |p| {:name => p.get(:name), :ensure => p.get(:ensure)} }
|
33
33
|
# we dont manage legacy
|
34
|
-
expect(instances.size).to eq(
|
34
|
+
expect(instances.size).to eq(3)
|
35
35
|
expect(instances[0]).to eq({:name => 'svc:/system/svc/restarter:default', :ensure => :running })
|
36
36
|
expect(instances[1]).to eq({:name => 'svc:/network/cswrsyncd:default', :ensure => :maintenance })
|
37
|
+
expect(instances[2]).to eq({:name => 'svc:/network/dns/client:default', :ensure => :degraded })
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
@@ -86,6 +87,10 @@ describe provider_class, :if => Puppet.features.posix? do
|
|
86
87
|
@provider.stubs(:svcs).returns("maintenance\t-")
|
87
88
|
expect(@provider.status).to eq(:maintenance)
|
88
89
|
end
|
90
|
+
it "should return degraded if in degraded in svcs output" do
|
91
|
+
@provider.stubs(:svcs).returns("degraded\t-")
|
92
|
+
expect(@provider.status).to eq(:degraded)
|
93
|
+
end
|
89
94
|
it "should return target state if transitioning in svcs output" do
|
90
95
|
@provider.stubs(:svcs).returns("online\tdisabled")
|
91
96
|
expect(@provider.status).to eq(:stopped)
|
@@ -118,6 +123,13 @@ describe provider_class, :if => Puppet.features.posix? do
|
|
118
123
|
@provider.start
|
119
124
|
end
|
120
125
|
|
126
|
+
it "should execute external command 'svcadm clear /system/myservice' if in degraded" do
|
127
|
+
@provider.stubs(:status).returns :degraded
|
128
|
+
@provider.expects(:texecute).with(:start, ["/usr/sbin/svcadm", :clear, "/system/myservice"], true)
|
129
|
+
@provider.expects(:wait).with('online')
|
130
|
+
@provider.start
|
131
|
+
end
|
132
|
+
|
121
133
|
it "should error if timeout occurs while starting the service" do
|
122
134
|
@provider.expects(:status).returns :stopped
|
123
135
|
@provider.expects(:texecute).with(:start, ["/usr/sbin/svcadm", :enable, "-s", "/system/myservice"], true)
|
@@ -151,7 +151,7 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
151
151
|
|
152
152
|
it "should start the service with systemctl start otherwise" do
|
153
153
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
154
|
-
provider.expects(:systemctl).with(
|
154
|
+
provider.expects(:systemctl).with(:unmask, 'sshd.service')
|
155
155
|
provider.expects(:execute).with(['/bin/systemctl','start','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
156
156
|
provider.start
|
157
157
|
end
|
@@ -174,49 +174,31 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
174
174
|
describe "#enabled?" do
|
175
175
|
it "should return :true if the service is enabled" do
|
176
176
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
177
|
-
provider.expects(:
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
).returns "
|
177
|
+
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "enabled\n"
|
178
|
+
expect(provider.enabled?).to eq(:true)
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should return :true if the service is static" do
|
182
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
183
|
+
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "static\n"
|
184
184
|
expect(provider.enabled?).to eq(:true)
|
185
185
|
end
|
186
186
|
|
187
187
|
it "should return :false if the service is disabled" do
|
188
188
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
189
|
-
provider.expects(:
|
190
|
-
'show',
|
191
|
-
'sshd.service',
|
192
|
-
'--property', 'LoadState',
|
193
|
-
'--property', 'UnitFileState',
|
194
|
-
'--no-pager'
|
195
|
-
).returns "LoadState=loaded\nUnitFileState=disabled\n"
|
189
|
+
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "disabled\n"
|
196
190
|
expect(provider.enabled?).to eq(:false)
|
197
191
|
end
|
198
192
|
|
199
193
|
it "should return :false if the service is masked and the resource is attempting to be disabled" do
|
200
194
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => false))
|
201
|
-
provider.expects(:
|
202
|
-
'show',
|
203
|
-
'sshd.service',
|
204
|
-
'--property', 'LoadState',
|
205
|
-
'--property', 'UnitFileState',
|
206
|
-
'--no-pager'
|
207
|
-
).returns "LoadState=masked\nUnitFileState=\n"
|
195
|
+
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "masked\n"
|
208
196
|
expect(provider.enabled?).to eq(:false)
|
209
197
|
end
|
210
198
|
|
211
199
|
it "should return :mask if the service is masked and the resource is attempting to be masked" do
|
212
200
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => 'mask'))
|
213
|
-
provider.expects(:
|
214
|
-
'show',
|
215
|
-
'sshd.service',
|
216
|
-
'--property', 'LoadState',
|
217
|
-
'--property', 'UnitFileState',
|
218
|
-
'--no-pager'
|
219
|
-
).returns "LoadState=masked\nUnitFileState=\n"
|
201
|
+
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "masked\n"
|
220
202
|
expect(provider.enabled?).to eq(:mask)
|
221
203
|
end
|
222
204
|
end
|
@@ -224,8 +206,8 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
224
206
|
describe "#enable" do
|
225
207
|
it "should run systemctl enable to enable a service" do
|
226
208
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
227
|
-
provider.expects(:systemctl).with(
|
228
|
-
provider.expects(:systemctl).with(
|
209
|
+
provider.expects(:systemctl).with(:unmask, 'sshd.service')
|
210
|
+
provider.expects(:systemctl).with(:enable, 'sshd.service')
|
229
211
|
provider.enable
|
230
212
|
end
|
231
213
|
end
|
@@ -245,7 +227,7 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
245
227
|
# a string.
|
246
228
|
# This should be made consistent in the future and all tests updated.
|
247
229
|
provider.expects(:systemctl).with(:disable, 'sshd.service')
|
248
|
-
provider.expects(:systemctl).with(
|
230
|
+
provider.expects(:systemctl).with(:mask, 'sshd.service')
|
249
231
|
provider.mask
|
250
232
|
end
|
251
233
|
end
|
@@ -253,16 +235,26 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
253
235
|
# Note: systemd provider does not care about hasstatus or a custom status
|
254
236
|
# command. I just assume that it does not make sense for systemd.
|
255
237
|
describe "#status" do
|
256
|
-
it "should return running if
|
238
|
+
it "should return running if if the command returns 0" do
|
257
239
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
258
|
-
provider.expects(:
|
240
|
+
provider.expects(:execute).with(['/bin/systemctl','is-active','sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).returns "active\n"
|
241
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(0)
|
259
242
|
expect(provider.status).to eq(:running)
|
260
243
|
end
|
261
244
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
245
|
+
[-10,-1,3,10].each { |ec|
|
246
|
+
it "should return stopped if the command returns something non-0" do
|
247
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
248
|
+
provider.expects(:execute).with(['/bin/systemctl','is-active','sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).returns "inactive\n"
|
249
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(ec)
|
250
|
+
expect(provider.status).to eq(:stopped)
|
251
|
+
end
|
252
|
+
}
|
253
|
+
|
254
|
+
it "should use the supplied status command if specified" do
|
255
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :status => '/bin/foo'))
|
256
|
+
provider.expects(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
|
257
|
+
provider.status
|
266
258
|
end
|
267
259
|
end
|
268
260
|
|
@@ -289,7 +281,7 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
289
281
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
290
282
|
provider.stubs(:system)
|
291
283
|
$CHILD_STATUS.expects(:exitstatus).returns(status)
|
292
|
-
expect(provider.debian_enabled?
|
284
|
+
expect(provider.debian_enabled?).to eq(:true)
|
293
285
|
end
|
294
286
|
end
|
295
287
|
|
@@ -299,7 +291,7 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
299
291
|
provider.stubs(:system)
|
300
292
|
provider.expects(:get_start_link_count).returns(4)
|
301
293
|
$CHILD_STATUS.expects(:exitstatus).twice.returns(status)
|
302
|
-
expect(provider.debian_enabled?
|
294
|
+
expect(provider.debian_enabled?).to eq(:true)
|
303
295
|
end
|
304
296
|
|
305
297
|
it "should return false when status is #{status} and there are less than 4 start links" do
|
@@ -307,7 +299,7 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
307
299
|
provider.stubs(:system)
|
308
300
|
provider.expects(:get_start_link_count).returns(1)
|
309
301
|
$CHILD_STATUS.expects(:exitstatus).twice.returns(status)
|
310
|
-
expect(provider.debian_enabled?
|
302
|
+
expect(provider.debian_enabled?).to eq(:false)
|
311
303
|
end
|
312
304
|
end
|
313
305
|
end
|