chef 12.21.14-universal-mingw32 → 12.21.20-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/chef/client.rb +3 -0
- data/lib/chef/provider/dsc_script.rb +5 -1
- data/lib/chef/provider/package/dnf.rb +10 -5
- data/lib/chef/resource/dnf_package.rb +9 -2
- data/lib/chef/util/dsc/lcm_output_parser.rb +57 -2
- data/lib/chef/util/dsc/local_configuration_manager.rb +16 -16
- data/lib/chef/version.rb +1 -1
- data/spec/unit/client_spec.rb +11 -0
- data/spec/unit/provider_resolver_spec.rb +4 -1
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +102 -18
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +2 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5503ffce112604e7fb025b86f087c3b82a8b0de0
|
4
|
+
data.tar.gz: a57cb1c814dc50488defc108568b74cc99c42e36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02f09b4afe63ce8541d90445a7960f5b04fd9bb84b323453a00cb5fc7e7fee186cd81e87e0ce5aa3c49c86e3e154243fd5662f049af606d9282efbb335cd7c11
|
7
|
+
data.tar.gz: 9b6b1602dc122533f216fb5863eed4065fa243c8645f31fec0728538ac2b1561ff6d617ff8f9c6a1c231d8422c27531b40fab78be76464ddbb5ddcc5d4c11fca
|
data/README.md
CHANGED
@@ -291,7 +291,7 @@ Chef - A configuration management system
|
|
291
291
|
| | |
|
292
292
|
|:---------------------|:-----------------------------------------|
|
293
293
|
| **Author:** | Adam Jacob (<adam@chef.io>)
|
294
|
-
| **Copyright:** | Copyright 2008-
|
294
|
+
| **Copyright:** | Copyright 2008-2017, Chef Software, Inc.
|
295
295
|
| **License:** | Apache License, Version 2.0
|
296
296
|
|
297
297
|
```
|
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
3
3
|
# Author:: Daniel DeLeo (<dan@chef.io>)
|
4
|
-
# Copyright:: Copyright 2008-
|
4
|
+
# Copyright:: Copyright 2008-2017, Chef Software Inc.
|
5
5
|
# License:: Apache License, Version 2.0
|
6
6
|
#
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
12.21.
|
1
|
+
12.21.20
|
data/lib/chef/client.rb
CHANGED
@@ -605,6 +605,9 @@ class Chef
|
|
605
605
|
filter = Chef::Config[:minimal_ohai] ? %w{fqdn machinename hostname platform platform_version os os_version} : nil
|
606
606
|
ohai.all_plugins(filter)
|
607
607
|
events.ohai_completed(node)
|
608
|
+
rescue Ohai::Exceptions::CriticalPluginFailure => e
|
609
|
+
Chef::Log.error("Critical Ohai plugins failed: #{e.message}")
|
610
|
+
exit(false)
|
608
611
|
end
|
609
612
|
|
610
613
|
#
|
@@ -165,7 +165,11 @@ class Chef
|
|
165
165
|
if resource.changes_state?
|
166
166
|
# We ignore the last log message because it only contains the time it took, which looks weird
|
167
167
|
cleaned_messages = resource.change_log[0..-2].map { |c| c.sub(/^#{Regexp.escape(resource.name)}/, "").strip }
|
168
|
-
|
168
|
+
unless cleaned_messages.empty?
|
169
|
+
"converge DSC resource #{resource.name} by #{cleaned_messages.find_all { |c| c != '' }.join("\n")}"
|
170
|
+
else
|
171
|
+
"converge DSC resource #{resource.name}"
|
172
|
+
end
|
169
173
|
else
|
170
174
|
# This is needed because a dsc script can have resources that are both converged and not
|
171
175
|
"converge DSC resource #{resource.name} by doing nothing because it is already converged"
|
@@ -35,13 +35,18 @@ class Chef
|
|
35
35
|
use_multipackage_api
|
36
36
|
use_package_name_for_source
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
# all rhel variants >= 8 will use DNF
|
39
|
+
provides :package, platform_family: "rhel", platform: "!amazon", platform_version: ">= 8"
|
40
|
+
|
41
|
+
# fedora >= 22 uses DNF
|
42
|
+
provides :package, platform: "fedora", platform_version: ">= 22"
|
41
43
|
|
42
|
-
|
44
|
+
# amazon will eventually use DNF
|
45
|
+
provides :package, platform: "amazon" do
|
46
|
+
which("dnf")
|
47
|
+
end
|
43
48
|
|
44
|
-
provides :dnf_package
|
49
|
+
provides :dnf_package
|
45
50
|
|
46
51
|
#
|
47
52
|
# Most of the magic in this class happens in the python helper script. The ruby side of this
|
@@ -29,8 +29,15 @@ class Chef
|
|
29
29
|
|
30
30
|
allowed_actions :install, :upgrade, :remove, :purge, :reconfig, :lock, :unlock, :flush_cache
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
# all rhel variants >= 8 will use DNF
|
33
|
+
provides :package, platform_family: "rhel", platform: "!amazon", platform_version: ">= 8"
|
34
|
+
|
35
|
+
# fedora >= 22 uses DNF
|
36
|
+
provides :package, platform: "fedora", platform_version: ">= 22"
|
37
|
+
|
38
|
+
# amazon will eventually use DNF
|
39
|
+
provides :package, platform: "amazon" do
|
40
|
+
which("dnf")
|
34
41
|
end
|
35
42
|
|
36
43
|
provides :dnf_package
|
@@ -28,7 +28,7 @@ class Chef
|
|
28
28
|
# Parses the output from LCM and returns a list of Chef::Util::DSC::ResourceInfo objects
|
29
29
|
# that describe how the resources affected the system
|
30
30
|
#
|
31
|
-
# Example:
|
31
|
+
# Example for WhatIfParser:
|
32
32
|
# parse <<-EOF
|
33
33
|
# What if: [Machine]: LCM: [Start Set ]
|
34
34
|
# What if: [Machine]: LCM: [Start Resource ] [[File]FileToNotBeThere]
|
@@ -53,7 +53,62 @@ class Chef
|
|
53
53
|
# )
|
54
54
|
# ]
|
55
55
|
#
|
56
|
-
|
56
|
+
# Example for TestDSCParser:
|
57
|
+
# parse <<-EOF
|
58
|
+
# InDesiredState : False
|
59
|
+
# ResourcesInDesiredState :
|
60
|
+
# ResourcesNotInDesiredState: {[Environment]texteditor}
|
61
|
+
# ReturnValue : 0
|
62
|
+
# PSComputerName : .
|
63
|
+
# EOF
|
64
|
+
#
|
65
|
+
# would return
|
66
|
+
#
|
67
|
+
# [
|
68
|
+
# Chef::Util::DSC::ResourceInfo.new(
|
69
|
+
# '{[Environment]texteditor}',
|
70
|
+
# true,
|
71
|
+
# [
|
72
|
+
# ]
|
73
|
+
# )
|
74
|
+
# ]
|
75
|
+
#
|
76
|
+
|
77
|
+
def self.parse(lcm_output, test_dsc_configuration)
|
78
|
+
test_dsc_configuration ? test_dsc_parser(lcm_output) : what_if_parser(lcm_output)
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.test_dsc_parser(lcm_output)
|
82
|
+
lcm_output ||= ""
|
83
|
+
current_resource = Hash.new
|
84
|
+
|
85
|
+
resources = []
|
86
|
+
lcm_output.lines.each do |line|
|
87
|
+
op_action , op_value = line.strip.split(":")
|
88
|
+
op_action&.strip!
|
89
|
+
case op_action
|
90
|
+
when "InDesiredState"
|
91
|
+
current_resource[:skipped] = op_value.strip == "True" ? true : false
|
92
|
+
when "ResourcesInDesiredState"
|
93
|
+
current_resource[:name] = op_value.strip if op_value
|
94
|
+
when "ResourcesNotInDesiredState"
|
95
|
+
current_resource[:name] = op_value.strip if op_value
|
96
|
+
when "ReturnValue"
|
97
|
+
current_resource[:context] = nil
|
98
|
+
end
|
99
|
+
end
|
100
|
+
if current_resource[:name]
|
101
|
+
resources.push(current_resource)
|
102
|
+
end
|
103
|
+
|
104
|
+
if resources.length > 0
|
105
|
+
build_resource_info(resources)
|
106
|
+
else
|
107
|
+
raise Chef::Exceptions::LCMParser, "Could not parse:\n#{lcm_output}"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.what_if_parser(lcm_output)
|
57
112
|
lcm_output ||= ""
|
58
113
|
current_resource = Hash.new
|
59
114
|
|
@@ -29,7 +29,7 @@ class Chef::Util::DSC
|
|
29
29
|
|
30
30
|
def test_configuration(configuration_document, shellout_flags)
|
31
31
|
status = run_configuration_cmdlet(configuration_document, false, shellout_flags)
|
32
|
-
|
32
|
+
log_dsc_exception(status.stderr) unless status.succeeded?
|
33
33
|
configuration_update_required?(status.return_value)
|
34
34
|
end
|
35
35
|
|
@@ -77,7 +77,7 @@ class Chef::Util::DSC
|
|
77
77
|
ps4_base_command
|
78
78
|
else
|
79
79
|
if ps_version_gte_5?
|
80
|
-
"#{common_command_prefix} Test-DscConfiguration -path #{@configuration_path}"
|
80
|
+
"#{common_command_prefix} Test-DscConfiguration -path #{@configuration_path} | format-list"
|
81
81
|
else
|
82
82
|
ps4_base_command + " -whatif; if (! $?) { exit 1 }"
|
83
83
|
end
|
@@ -88,31 +88,31 @@ class Chef::Util::DSC
|
|
88
88
|
Chef::Platform.supported_powershell_version?(@node, 5)
|
89
89
|
end
|
90
90
|
|
91
|
-
def
|
92
|
-
if whatif_not_supported?(
|
91
|
+
def log_dsc_exception(dsc_exception_output)
|
92
|
+
if whatif_not_supported?(dsc_exception_output)
|
93
93
|
# LCM returns an error if any of the resources do not support the opptional What-If
|
94
94
|
Chef::Log.warn("Received error while testing configuration due to resource not supporting 'WhatIf'")
|
95
|
-
elsif dsc_module_import_failure?(
|
96
|
-
Chef::Log.warn("Received error while testing configuration due to a module for an imported resource possibly not being fully installed:\n#{
|
95
|
+
elsif dsc_module_import_failure?(dsc_exception_output)
|
96
|
+
Chef::Log.warn("Received error while testing configuration due to a module for an imported resource possibly not being fully installed:\n#{dsc_exception_output.gsub(/\s+/, ' ')}")
|
97
97
|
else
|
98
|
-
Chef::Log.warn("Received error while testing configuration:\n#{
|
98
|
+
Chef::Log.warn("Received error while testing configuration:\n#{dsc_exception_output.gsub(/\s+/, ' ')}")
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
def whatif_not_supported?(
|
103
|
-
!! (
|
102
|
+
def whatif_not_supported?(dsc_exception_output)
|
103
|
+
!! (dsc_exception_output.gsub(/[\r\n]+/, "").gsub(/\s+/, " ") =~ /A parameter cannot be found that matches parameter name 'Whatif'/i)
|
104
104
|
end
|
105
105
|
|
106
|
-
def dsc_module_import_failure?(
|
107
|
-
!! (
|
108
|
-
|
109
|
-
|
106
|
+
def dsc_module_import_failure?(command_output)
|
107
|
+
!! (command_output =~ /\sCimException/ &&
|
108
|
+
command_output =~ /ProviderOperationExecutionFailure/ &&
|
109
|
+
command_output =~ /\smodule\s+is\s+installed/)
|
110
110
|
end
|
111
111
|
|
112
|
-
def configuration_update_required?(
|
113
|
-
Chef::Log.debug("DSC: DSC returned the following '-whatif' output from test operation:\n#{
|
112
|
+
def configuration_update_required?(command_output)
|
113
|
+
Chef::Log.debug("DSC: DSC returned the following '-whatif' output from test operation:\n#{command_output}")
|
114
114
|
begin
|
115
|
-
Parser.parse(
|
115
|
+
Parser.parse(command_output, ps_version_gte_5?)
|
116
116
|
rescue Chef::Exceptions::LCMParser => e
|
117
117
|
Chef::Log.warn("Could not parse LCM output: #{e}")
|
118
118
|
[Chef::Util::DSC::ResourceInfo.new("Unknown DSC Resources", true, ["Unknown changes because LCM output was not parsable."])]
|
data/lib/chef/version.rb
CHANGED
data/spec/unit/client_spec.rb
CHANGED
@@ -44,6 +44,17 @@ describe Chef::Client do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
context "when Ohai tells us to fail" do
|
48
|
+
it "fails" do
|
49
|
+
ohai_system = Ohai::System.new
|
50
|
+
module Ohai::Exceptions
|
51
|
+
class CriticalPluginFailure < Error; end
|
52
|
+
end
|
53
|
+
expect(ohai_system).to receive(:all_plugins) { raise Ohai::Exceptions::CriticalPluginFailure }
|
54
|
+
expect { client.run_ohai }.to raise_error(SystemExit)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
47
58
|
describe "authentication protocol selection" do
|
48
59
|
context "when FIPS is disabled" do
|
49
60
|
before do
|
@@ -709,18 +709,21 @@ describe Chef::ProviderResolver do
|
|
709
709
|
|
710
710
|
"rhel" => {
|
711
711
|
# service: [ Chef::Resource::SystemdService, Chef::Provider::Service::Systemd ],
|
712
|
-
package: [ Chef::Resource::
|
712
|
+
package: [ Chef::Resource::DnfPackage, Chef::Provider::Package::Dnf ],
|
713
713
|
ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig::Redhat ],
|
714
714
|
|
715
715
|
%w{amazon xcp xenserver ibm_powerkvm cloudlinux parallels} => {
|
716
716
|
"3.1.4" => {
|
717
|
+
package: [ Chef::Resource::YumPackage, Chef::Provider::Package::Yum ],
|
717
718
|
# service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
|
718
719
|
},
|
719
720
|
},
|
720
721
|
%w{redhat centos scientific oracle} => {
|
721
722
|
"7.0" => {
|
723
|
+
package: [ Chef::Resource::YumPackage, Chef::Provider::Package::Yum ],
|
722
724
|
},
|
723
725
|
"6.0" => {
|
726
|
+
package: [ Chef::Resource::YumPackage, Chef::Provider::Package::Yum ],
|
724
727
|
# service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
|
725
728
|
},
|
726
729
|
},
|
@@ -19,20 +19,33 @@
|
|
19
19
|
require "chef/util/dsc/lcm_output_parser"
|
20
20
|
|
21
21
|
describe Chef::Util::DSC::LocalConfigurationManager::Parser do
|
22
|
-
context "empty input parameter" do
|
22
|
+
context "empty input parameter for WhatIfParser" do
|
23
23
|
it "raises an exception when there are no valid lines" do
|
24
24
|
str = <<-EOF
|
25
25
|
|
26
26
|
EOF
|
27
|
-
expect { Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str) }.to raise_error(Chef::Exceptions::LCMParser)
|
27
|
+
expect { Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false) }.to raise_error(Chef::Exceptions::LCMParser)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "raises an exception for a nil input" do
|
31
|
-
expect { Chef::Util::DSC::LocalConfigurationManager::Parser.parse(nil) }.to raise_error(Chef::Exceptions::LCMParser)
|
31
|
+
expect { Chef::Util::DSC::LocalConfigurationManager::Parser.parse(nil, false) }.to raise_error(Chef::Exceptions::LCMParser)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
context "
|
35
|
+
context "empty input parameter for TestDSCParser" do
|
36
|
+
it "raises an exception when there are no valid lines" do
|
37
|
+
str = <<-EOF
|
38
|
+
|
39
|
+
EOF
|
40
|
+
expect { Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, true) }.to raise_error(Chef::Exceptions::LCMParser)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "raises an exception for a nil input" do
|
44
|
+
expect { Chef::Util::DSC::LocalConfigurationManager::Parser.parse(nil, true) }.to raise_error(Chef::Exceptions::LCMParser)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "correctly formatted output from lcm for WhatIfParser" do
|
36
49
|
it "returns a single resource when only 1 logged with the correct name" do
|
37
50
|
str = <<EOF
|
38
51
|
logtype: [machinename]: LCM: [ Start Set ]
|
@@ -40,7 +53,7 @@ logtype: [machinename]: LCM: [ Start Resource ] [name]
|
|
40
53
|
logtype: [machinename]: LCM: [ End Resource ] [name]
|
41
54
|
logtype: [machinename]: LCM: [ End Set ]
|
42
55
|
EOF
|
43
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
56
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
44
57
|
expect(resources.length).to eq(1)
|
45
58
|
expect(resources[0].name).to eq("[name]")
|
46
59
|
end
|
@@ -54,7 +67,7 @@ logtype: [machinename]: LCM: [ End Set ] [name]
|
|
54
67
|
logtype: [machinename]: LCM: [ End Resource ] [name]
|
55
68
|
logtype: [machinename]: LCM: [ End Set ]
|
56
69
|
EOF
|
57
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
70
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
58
71
|
expect(resources[0].changes_state?).to be_truthy
|
59
72
|
end
|
60
73
|
|
@@ -68,11 +81,11 @@ logtype: [machinename]: LCM: [ End Set ] [name]
|
|
68
81
|
logtype: [machinename]: LCM: [ End Resource ] [name]
|
69
82
|
logtype: [machinename]: LCM: [ End Set ]
|
70
83
|
EOF
|
71
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
84
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
72
85
|
expect(resources[0].change_log).to match_array(["[name]", "[message]", "[name]"])
|
73
86
|
end
|
74
87
|
|
75
|
-
it "
|
88
|
+
it "returns false for changes_state?" do
|
76
89
|
str = <<EOF
|
77
90
|
logtype: [machinename]: LCM: [ Start Set ]
|
78
91
|
logtype: [machinename]: LCM: [ Start Resource ] [name]
|
@@ -80,11 +93,11 @@ logtype: [machinename]: LCM: [ Skip Set ] [name]
|
|
80
93
|
logtype: [machinename]: LCM: [ End Resource ] [name]
|
81
94
|
logtype: [machinename]: LCM: [ End Set ]
|
82
95
|
EOF
|
83
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
96
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
84
97
|
expect(resources[0].changes_state?).to be_falsey
|
85
98
|
end
|
86
99
|
|
87
|
-
it "
|
100
|
+
it "returns an empty array for change_log if changes_state? is false" do
|
88
101
|
str = <<EOF
|
89
102
|
logtype: [machinename]: LCM: [ Start Set ]
|
90
103
|
logtype: [machinename]: LCM: [ Start Resource ] [name]
|
@@ -92,13 +105,64 @@ logtype: [machinename]: LCM: [ Skip Set ] [name]
|
|
92
105
|
logtype: [machinename]: LCM: [ End Resource ] [name]
|
93
106
|
logtype: [machinename]: LCM: [ End Set ]
|
94
107
|
EOF
|
95
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
108
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
96
109
|
expect(resources[0].change_log).to be_empty
|
97
110
|
end
|
98
111
|
end
|
99
112
|
|
100
|
-
context "
|
101
|
-
it "
|
113
|
+
context "correctly formatted output from lcm for TestDSCParser" do
|
114
|
+
it "returns a single resource when only 1 logged with the correct name" do
|
115
|
+
str = <<EOF
|
116
|
+
InDesiredState : False
|
117
|
+
ResourcesInDesiredState :
|
118
|
+
ResourcesNotInDesiredState: [name]
|
119
|
+
ReturnValue : 0
|
120
|
+
PSComputerName : .
|
121
|
+
EOF
|
122
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, true)
|
123
|
+
expect(resources.length).to eq(1)
|
124
|
+
expect(resources[0].name).to eq("[name]")
|
125
|
+
end
|
126
|
+
|
127
|
+
it "identifies when a resource changes the state of the system" do
|
128
|
+
str = <<EOF
|
129
|
+
InDesiredState : False
|
130
|
+
ResourcesInDesiredState :
|
131
|
+
ResourcesNotInDesiredState: [name]
|
132
|
+
ReturnValue : 0
|
133
|
+
PSComputerName : .
|
134
|
+
EOF
|
135
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, true)
|
136
|
+
expect(resources[0].changes_state?).to be_truthy
|
137
|
+
end
|
138
|
+
|
139
|
+
it "returns false for changes_state?" do
|
140
|
+
str = <<EOF
|
141
|
+
InDesiredState : True
|
142
|
+
ResourcesInDesiredState : [name]
|
143
|
+
ResourcesNotInDesiredState:
|
144
|
+
ReturnValue : 0
|
145
|
+
PSComputerName : .
|
146
|
+
EOF
|
147
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, true)
|
148
|
+
expect(resources[0].changes_state?).to be_falsey
|
149
|
+
end
|
150
|
+
|
151
|
+
it "returns an empty array for change_log if changes_state? is false" do
|
152
|
+
str = <<EOF
|
153
|
+
InDesiredState : True
|
154
|
+
ResourcesInDesiredState : [name]
|
155
|
+
ResourcesNotInDesiredState:
|
156
|
+
ReturnValue : 0
|
157
|
+
PSComputerName : .
|
158
|
+
EOF
|
159
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, true)
|
160
|
+
expect(resources[0].change_log).to be_empty
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context "Incorrectly formatted output from LCM for WhatIfParser" do
|
165
|
+
it "allows missing [End Resource] when its the last one and still find all the resource" do
|
102
166
|
str = <<-EOF
|
103
167
|
logtype: [machinename]: LCM: [ Start Set ]
|
104
168
|
logtype: [machinename]: LCM: [ Start Resource ] [name]
|
@@ -114,12 +178,12 @@ logtype: [machinename]: LCM: [ End Set ]
|
|
114
178
|
logtype: [machinename]: LCM: [ End Set ]
|
115
179
|
EOF
|
116
180
|
|
117
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
181
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
118
182
|
expect(resources[0].changes_state?).to be_falsey
|
119
183
|
expect(resources[1].changes_state?).to be_truthy
|
120
184
|
end
|
121
185
|
|
122
|
-
it "
|
186
|
+
it "allow missing [End Resource] when its the first one and still find all the resource" do
|
123
187
|
str = <<-EOF
|
124
188
|
logtype: [machinename]: LCM: [ Start Set ]
|
125
189
|
logtype: [machinename]: LCM: [ Start Resource ] [name]
|
@@ -135,12 +199,12 @@ logtype: [machinename]: LCM: [ End Resource ]
|
|
135
199
|
logtype: [machinename]: LCM: [ End Set ]
|
136
200
|
EOF
|
137
201
|
|
138
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
202
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
139
203
|
expect(resources[0].changes_state?).to be_falsey
|
140
204
|
expect(resources[1].changes_state?).to be_truthy
|
141
205
|
end
|
142
206
|
|
143
|
-
it "
|
207
|
+
it "allows missing set and end resource and assume an unconverged resource in this case" do
|
144
208
|
str = <<-EOF
|
145
209
|
logtype: [machinename]: LCM: [ Start Set ]
|
146
210
|
logtype: [machinename]: LCM: [ Start Resource ] [name]
|
@@ -154,11 +218,31 @@ logtype: [machinename]: LCM: [ End Set ]
|
|
154
218
|
logtype: [machinename]: LCM: [ End Resource ]
|
155
219
|
logtype: [machinename]: LCM: [ End Set ]
|
156
220
|
EOF
|
157
|
-
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str)
|
221
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, false)
|
158
222
|
expect(resources[0].changes_state?).to be_truthy
|
159
223
|
expect(resources[0].name).to eql("[name]")
|
160
224
|
expect(resources[1].changes_state?).to be_truthy
|
161
225
|
expect(resources[1].name).to eql("[name2]")
|
162
226
|
end
|
163
227
|
end
|
228
|
+
|
229
|
+
context "Incorrectly formatted output from LCM for TestDSCParser" do
|
230
|
+
it "allows missing [End Resource] when its the last one and still find all the resource" do
|
231
|
+
str = <<EOF
|
232
|
+
InDesiredState : True
|
233
|
+
ResourcesInDesiredState :
|
234
|
+
ResourcesNotInDesiredState: [name]
|
235
|
+
ReturnValue : 0
|
236
|
+
PSComputerName : .
|
237
|
+
InDesiredState : True
|
238
|
+
ResourcesInDesiredState :
|
239
|
+
ResourcesNotInDesiredState: [name2]
|
240
|
+
ReturnValue : 0
|
241
|
+
PSComputerName : .
|
242
|
+
EOF
|
243
|
+
|
244
|
+
resources = Chef::Util::DSC::LocalConfigurationManager::Parser.parse(str, true)
|
245
|
+
expect(resources[0].changes_state?).to be_falsey
|
246
|
+
end
|
247
|
+
end
|
164
248
|
end
|
@@ -57,6 +57,7 @@ EOH
|
|
57
57
|
context "when interacting with the LCM using a PowerShell cmdlet" do
|
58
58
|
before(:each) do
|
59
59
|
allow(lcm).to receive(:run_configuration_cmdlet).and_return(lcm_status)
|
60
|
+
allow(lcm).to receive(:ps_version_gte_5?).and_return(false)
|
60
61
|
end
|
61
62
|
context "that returns successfully" do
|
62
63
|
let(:lcm_standard_output) { normal_lcm_output }
|
@@ -103,7 +104,7 @@ EOH
|
|
103
104
|
let(:common_command_prefix) { "$ProgressPreference = 'SilentlyContinue';" }
|
104
105
|
let(:ps4_base_command) { "#{common_command_prefix} Start-DscConfiguration -path tmp -wait -erroraction 'stop' -force" }
|
105
106
|
let(:lcm_command_ps4) { ps4_base_command + " -whatif; if (! $?) { exit 1 }" }
|
106
|
-
let(:lcm_command_ps5) { "#{common_command_prefix} Test-DscConfiguration -path tmp" }
|
107
|
+
let(:lcm_command_ps5) { "#{common_command_prefix} Test-DscConfiguration -path tmp | format-list" }
|
107
108
|
let(:lcm_standard_output) { normal_lcm_output }
|
108
109
|
let(:lcm_standard_error) { nil }
|
109
110
|
let(:lcm_cmdlet_success) { true }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 12.21.
|
4
|
+
version: 12.21.20
|
5
5
|
platform: universal-mingw32
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 12.21.
|
19
|
+
version: 12.21.20
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 12.21.
|
26
|
+
version: 12.21.20
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mixlib-cli
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|