chef 15.3.14 → 15.4.45
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/chef.gemspec +2 -2
- data/lib/chef/application/solo.rb +1 -1
- data/lib/chef/event_dispatch/dispatcher.rb +9 -2
- data/lib/chef/formatters/doc.rb +3 -3
- data/lib/chef/knife.rb +13 -3
- data/lib/chef/knife/bootstrap.rb +28 -4
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +7 -8
- data/lib/chef/knife/data_bag_secret_options.rb +11 -4
- data/lib/chef/knife/download.rb +2 -2
- data/lib/chef/knife/exec.rb +9 -1
- data/lib/chef/knife/ssh.rb +1 -1
- data/lib/chef/knife/ssl_check.rb +1 -1
- data/lib/chef/knife/supermarket_list.rb +19 -7
- data/lib/chef/knife/supermarket_search.rb +3 -2
- data/lib/chef/node/attribute.rb +2 -0
- data/lib/chef/node/attribute_collections.rb +8 -0
- data/lib/chef/node/immutable_collections.rb +12 -0
- data/lib/chef/node/mixin/immutablize_array.rb +1 -0
- data/lib/chef/node/mixin/immutablize_hash.rb +1 -0
- data/lib/chef/provider.rb +14 -8
- data/lib/chef/provider/package/chocolatey.rb +11 -3
- data/lib/chef/provider/package/dnf/python_helper.rb +8 -3
- data/lib/chef/provider/package/windows/exe.rb +2 -2
- data/lib/chef/provider/package/windows/msi.rb +3 -3
- data/lib/chef/provider/package/yum/python_helper.rb +8 -3
- data/lib/chef/provider/service/windows.rb +1 -1
- data/lib/chef/resource/apt_repository.rb +19 -13
- data/lib/chef/resource/apt_update.rb +15 -1
- data/lib/chef/resource/archive_file.rb +10 -1
- data/lib/chef/resource/build_essential.rb +14 -1
- data/lib/chef/resource/chocolatey_config.rb +17 -1
- data/lib/chef/resource/chocolatey_feature.rb +15 -0
- data/lib/chef/resource/chocolatey_package.rb +31 -1
- data/lib/chef/resource/chocolatey_source.rb +17 -1
- data/lib/chef/resource/cookbook_file.rb +1 -1
- data/lib/chef/resource/cron_access.rb +22 -1
- data/lib/chef/resource/cron_d.rb +46 -1
- data/lib/chef/resource/dmg_package.rb +28 -0
- data/lib/chef/resource/kernel_module.rb +61 -0
- data/lib/chef/resource/sudo.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +72 -3
- data/lib/chef/resource/windows_service.rb +1 -1
- data/lib/chef/resource/windows_share.rb +2 -1
- data/lib/chef/shell.rb +4 -4
- data/lib/chef/shell/ext.rb +2 -2
- data/lib/chef/train_transport.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/spec/functional/resource/ifconfig_spec.rb +0 -2
- data/spec/functional/resource/mount_spec.rb +0 -4
- data/spec/functional/util/powershell/cmdlet_spec.rb +2 -2
- data/spec/integration/knife/chef_repo_path_spec.rb +4 -2
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +19 -19
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/formatters/doc_spec.rb +18 -0
- data/spec/unit/knife/bootstrap_spec.rb +46 -10
- data/spec/unit/knife/supermarket_list_spec.rb +70 -0
- data/spec/unit/knife/supermarket_search_spec.rb +85 -0
- data/spec/unit/node/attribute_spec.rb +22 -0
- data/spec/unit/node/immutable_collections_spec.rb +72 -144
- data/spec/unit/provider/package/chocolatey_spec.rb +50 -35
- data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
- data/spec/unit/provider/service/windows_spec.rb +23 -3
- data/spec/unit/resource/chocolatey_package_spec.rb +17 -2
- data/spec/unit/resource/windows_ad_join_spec.rb +4 -0
- data/spec/unit/resource/windows_service_spec.rb +5 -0
- data/spec/unit/resource/windows_share_spec.rb +7 -0
- data/tasks/docs.rb +4 -1
- metadata +10 -8
data/lib/chef/resource/cron_d.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: 2008-
|
2
|
+
# Copyright:: 2008-2019, Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -26,6 +26,51 @@ class Chef
|
|
26
26
|
|
27
27
|
introduced "14.4"
|
28
28
|
description "Use the cron_d resource to manage cron definitions in /etc/cron.d. This is similar to the 'cron' resource, but it does not use the monolithic /etc/crontab file."
|
29
|
+
examples <<~DOC
|
30
|
+
To run a program on the fifth hour of the day
|
31
|
+
```ruby
|
32
|
+
cron_d 'noop' do
|
33
|
+
hour '5'
|
34
|
+
minute '0'
|
35
|
+
command '/bin/true'
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
To run an entry if a folder exists
|
40
|
+
```ruby
|
41
|
+
cron_d 'ganglia_tomcat_thread_max' do
|
42
|
+
command "/usr/bin/gmetric
|
43
|
+
-n 'tomcat threads max'
|
44
|
+
-t uint32
|
45
|
+
-v '/usr/local/bin/tomcat-stat
|
46
|
+
--thread-max'"
|
47
|
+
only_if { ::File.exist?('/home/jboss') }
|
48
|
+
end
|
49
|
+
```
|
50
|
+
|
51
|
+
To run an entry every Saturday, 8:00 AM
|
52
|
+
```ruby
|
53
|
+
cron_d 'name_of_cron_entry' do
|
54
|
+
minute '0'
|
55
|
+
hour '8'
|
56
|
+
weekday '6'
|
57
|
+
mailto 'admin@example.com'
|
58
|
+
action :create
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
To run an entry at 8:00 PM, every weekday (Monday through Friday), but only in November
|
63
|
+
```ruby
|
64
|
+
cron_d 'name_of_cron_entry' do
|
65
|
+
minute '0'
|
66
|
+
hour '20'
|
67
|
+
day '*'
|
68
|
+
month '11'
|
69
|
+
weekday '1-5'
|
70
|
+
action :create
|
71
|
+
end
|
72
|
+
```
|
73
|
+
DOC
|
29
74
|
|
30
75
|
# validate a provided value is between two other provided values
|
31
76
|
# we also allow * as a valid input
|
@@ -25,6 +25,34 @@ class Chef
|
|
25
25
|
|
26
26
|
description "Use the dmg_package resource to install a dmg 'package'. The resource will retrieve the dmg file from a remote URL, mount it using OS X's hdidutil, copy the application (.app directory) to the specified destination (/Applications), and detach the image using hdiutil. The dmg file will be stored in the Chef::Config[:file_cache_path]."
|
27
27
|
introduced "14.0"
|
28
|
+
examples <<~DOC
|
29
|
+
Install Google Chrome via the DMG package
|
30
|
+
```ruby
|
31
|
+
dmg_package 'Google Chrome' do
|
32
|
+
dmg_name 'googlechrome'
|
33
|
+
source 'https://dl-ssl.google.com/chrome/mac/stable/GGRM/googlechrome.dmg'
|
34
|
+
checksum '7daa2dc5c46d9bfb14f1d7ff4b33884325e5e63e694810adc58f14795165c91a'
|
35
|
+
action :install
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
Install Virtualbox from the .mpkg
|
40
|
+
```ruby
|
41
|
+
dmg_package 'Virtualbox' do
|
42
|
+
source 'http://dlc.sun.com.edgesuite.net/virtualbox/4.0.8/VirtualBox-4.0.8-71778-OSX.dmg'
|
43
|
+
type 'mpkg'
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
Install pgAdmin and automatically accept the EULA
|
48
|
+
```ruby
|
49
|
+
dmg_package 'pgAdmin3' do
|
50
|
+
source 'http://wwwmaster.postgresql.org/redir/198/h/pgadmin3/release/v1.12.3/osx/pgadmin3-1.12.3.dmg'
|
51
|
+
checksum '9435f79d5b52d0febeddfad392adf82db9df159196f496c1ab139a6957242ce9'
|
52
|
+
accept_eula true
|
53
|
+
end
|
54
|
+
```
|
55
|
+
DOC
|
28
56
|
|
29
57
|
property :app, String,
|
30
58
|
description: "The name of the application as it appears in the /Volumes directory if it differs from the resource block's name.",
|
@@ -15,11 +15,61 @@ class Chef
|
|
15
15
|
|
16
16
|
description "Use the kernel_module resource to manage kernel modules on Linux systems. This resource can load, unload, blacklist, disable, install, and uninstall modules."
|
17
17
|
introduced "14.3"
|
18
|
+
examples <<~DOC
|
19
|
+
Install and load a kernel module, and ensure it loads on reboot.
|
20
|
+
```ruby
|
21
|
+
kernel_module 'loop'
|
22
|
+
```
|
23
|
+
Install and load a kernel with a specific set of options, and ensure it loads on reboot. Consult kernel module
|
24
|
+
documentation for specific options that are supported.
|
25
|
+
```ruby
|
26
|
+
kernel_module 'loop' do
|
27
|
+
options [
|
28
|
+
'max_loop=4',
|
29
|
+
'max_part=8'
|
30
|
+
]
|
31
|
+
end
|
32
|
+
```
|
33
|
+
Load a kernel module.
|
34
|
+
```ruby
|
35
|
+
kernel_module 'loop' do
|
36
|
+
action :load
|
37
|
+
end
|
38
|
+
```
|
39
|
+
Unload a kernel module and remove module config, so it doesn’t load on reboot.
|
40
|
+
```ruby
|
41
|
+
kernel_module 'loop' do
|
42
|
+
action :uninstall
|
43
|
+
end
|
44
|
+
```
|
45
|
+
Unload kernel module.
|
46
|
+
```ruby
|
47
|
+
kernel_module 'loop' do
|
48
|
+
action :unload
|
49
|
+
end
|
50
|
+
```
|
51
|
+
Blacklist a module from loading.
|
52
|
+
```ruby
|
53
|
+
kernel_module 'loop' do
|
54
|
+
action :blacklist
|
55
|
+
end
|
56
|
+
```
|
57
|
+
Disable a kernel module.
|
58
|
+
```ruby
|
59
|
+
kernel_module 'loop' do
|
60
|
+
action :disable
|
61
|
+
end
|
62
|
+
```
|
63
|
+
DOC
|
18
64
|
|
19
65
|
property :modname, String,
|
20
66
|
description: "An optional property to set the kernel module name if it differs from the resource block's name.",
|
21
67
|
name_property: true, identity: true
|
22
68
|
|
69
|
+
property :options, Array,
|
70
|
+
description: "An optional property to set options for the kernel module.",
|
71
|
+
introduced: "15.4"
|
72
|
+
|
23
73
|
property :load_dir, String,
|
24
74
|
description: "The directory to load modules from.",
|
25
75
|
default: "/etc/modules-load.d"
|
@@ -31,6 +81,13 @@ class Chef
|
|
31
81
|
action :install do
|
32
82
|
description "Load kernel module, and ensure it loads on reboot."
|
33
83
|
|
84
|
+
# create options file before loading the module
|
85
|
+
unless new_resource.options.nil?
|
86
|
+
file "#{new_resource.unload_dir}/options_#{new_resource.modname}.conf" do
|
87
|
+
content "options #{new_resource.modname} #{new_resource.options.join(" ")}\n"
|
88
|
+
end.run_action(:create)
|
89
|
+
end
|
90
|
+
|
34
91
|
# load the module first before installing
|
35
92
|
new_resource.run_action(:load)
|
36
93
|
|
@@ -64,6 +121,10 @@ class Chef
|
|
64
121
|
notifies :run, "execute[update initramfs]", :delayed
|
65
122
|
end
|
66
123
|
|
124
|
+
file "#{new_resource.unload_dir}/options_#{new_resource.modname}.conf" do
|
125
|
+
action :delete
|
126
|
+
end
|
127
|
+
|
67
128
|
with_run_context :root do
|
68
129
|
find_resource(:execute, "update initramfs") do
|
69
130
|
command initramfs_command
|
data/lib/chef/resource/sudo.rb
CHANGED
@@ -166,7 +166,7 @@ class Chef
|
|
166
166
|
source new_resource.template
|
167
167
|
mode "0440"
|
168
168
|
variables new_resource.variables
|
169
|
-
verify "#{new_resource.visudo_binary} -cf
|
169
|
+
verify "cat #{new_resource.config_prefix}/sudoers %{path} | #{new_resource.visudo_binary} -cf -" if visudo_present?
|
170
170
|
action :create
|
171
171
|
end
|
172
172
|
else
|
@@ -185,7 +185,7 @@ class Chef
|
|
185
185
|
setenv: new_resource.setenv,
|
186
186
|
env_keep_add: new_resource.env_keep_add,
|
187
187
|
env_keep_subtract: new_resource.env_keep_subtract
|
188
|
-
verify "#{new_resource.visudo_binary} -cf
|
188
|
+
verify "cat #{new_resource.config_prefix}/sudoers %{path} | #{new_resource.visudo_binary} -cf -" if visudo_present?
|
189
189
|
action :create
|
190
190
|
end
|
191
191
|
end
|
@@ -57,6 +57,10 @@ class Chef
|
|
57
57
|
description: "Specifies a new hostname for the computer in the new domain.",
|
58
58
|
introduced: "14.5"
|
59
59
|
|
60
|
+
property :workgroup_name, String,
|
61
|
+
description: "Specifies the name of a workgroup to which the computer is added to when it is removed from the domain. The default value is WORKGROUP. This property is only applicable to the :leave action.",
|
62
|
+
introduced: "15.0"
|
63
|
+
|
60
64
|
# define this again so we can default it to true. Otherwise failures print the password
|
61
65
|
property :sensitive, [TrueClass, FalseClass],
|
62
66
|
default: true, desired_state: false
|
@@ -64,7 +68,7 @@ class Chef
|
|
64
68
|
action :join do
|
65
69
|
description "Join the Active Directory domain."
|
66
70
|
|
67
|
-
unless
|
71
|
+
unless on_desired_domain?
|
68
72
|
cmd = "$pswd = ConvertTo-SecureString \'#{new_resource.domain_password}\' -AsPlainText -Force;"
|
69
73
|
cmd << "$credential = New-Object System.Management.Automation.PSCredential (\"#{new_resource.domain_user}@#{new_resource.domain_name}\",$pswd);"
|
70
74
|
cmd << "Add-Computer -DomainName #{new_resource.domain_name} -Credential $credential"
|
@@ -92,12 +96,77 @@ class Chef
|
|
92
96
|
end
|
93
97
|
end
|
94
98
|
|
99
|
+
action :leave do
|
100
|
+
description "Leave the Active Directory domain."
|
101
|
+
|
102
|
+
if joined_to_domain?
|
103
|
+
cmd = ""
|
104
|
+
cmd << "$pswd = ConvertTo-SecureString \'#{new_resource.domain_password}\' -AsPlainText -Force;"
|
105
|
+
cmd << "$credential = New-Object System.Management.Automation.PSCredential (\"#{new_resource.domain_user}@#{new_resource.domain_name}\",$pswd);"
|
106
|
+
cmd << "Remove-Computer"
|
107
|
+
cmd << " -UnjoinDomainCredential $credential"
|
108
|
+
cmd << " -NewName \"#{new_resource.new_hostname}\"" if new_resource.new_hostname
|
109
|
+
cmd << " -WorkgroupName \"#{new_resource.workgroup_name}\"" if new_resource.workgroup_name
|
110
|
+
cmd << " -Force"
|
111
|
+
|
112
|
+
converge_by("leave Active Directory domain #{node_domain}") do
|
113
|
+
ps_run = powershell_out(cmd)
|
114
|
+
if ps_run.error?
|
115
|
+
if sensitive?
|
116
|
+
raise "Failed to leave the domain #{node_domain}: *suppressed sensitive resource output*"
|
117
|
+
else
|
118
|
+
raise "Failed to leave the domain #{node_domain}: #{ps_run.stderr}"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
unless new_resource.reboot == :never
|
123
|
+
reboot "Reboot to leave domain #{new_resource.domain_name}" do
|
124
|
+
action clarify_reboot(new_resource.reboot)
|
125
|
+
reason "Reboot to leave domain #{new_resource.domain_name}"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
95
132
|
action_class do
|
96
|
-
|
133
|
+
#
|
134
|
+
# @return [String] The domain name the node is joined to. When the node
|
135
|
+
# is not joined to a domain this will return the name of the
|
136
|
+
# workgroup the node is a member of.
|
137
|
+
#
|
138
|
+
def node_domain
|
97
139
|
node_domain = powershell_out!("(Get-WmiObject Win32_ComputerSystem).Domain")
|
98
140
|
raise "Failed to check if the system is joined to the domain #{new_resource.domain_name}: #{node_domain.stderr}}" if node_domain.error?
|
99
141
|
|
100
|
-
node_domain.stdout.downcase.strip
|
142
|
+
node_domain.stdout.downcase.strip
|
143
|
+
end
|
144
|
+
|
145
|
+
#
|
146
|
+
# @return [String] The workgroup the node is a member of. This will
|
147
|
+
# return an empty string if the system is not a member of a
|
148
|
+
# workgroup.
|
149
|
+
#
|
150
|
+
def node_workgroup
|
151
|
+
node_workgroup = powershell_out!("(Get-WmiObject Win32_ComputerSystem).Workgroup")
|
152
|
+
raise "Failed to check if the system is currently a member of a workgroup" if node_workgroup.error?
|
153
|
+
|
154
|
+
node_workgroup.stdout.downcase.strip
|
155
|
+
end
|
156
|
+
|
157
|
+
#
|
158
|
+
# @return [true, false] Whether or not the node is joined to ANY domain
|
159
|
+
#
|
160
|
+
def joined_to_domain?
|
161
|
+
node_workgroup.empty? && !node_domain.empty?
|
162
|
+
end
|
163
|
+
|
164
|
+
#
|
165
|
+
# @return [true, false] Whether or not the node is joined to the domain
|
166
|
+
# defined by the resource :domain_name property.
|
167
|
+
#
|
168
|
+
def on_desired_domain?
|
169
|
+
node_domain == new_resource.domain_name.downcase
|
101
170
|
end
|
102
171
|
|
103
172
|
# This resource historically took `:immediate` and `:delayed` as arguments to the reboot property but then
|
@@ -108,7 +108,7 @@ class Chef
|
|
108
108
|
description: "Description of the service.",
|
109
109
|
introduced: "14.0"
|
110
110
|
|
111
|
-
property :run_as_user, String, default: "
|
111
|
+
property :run_as_user, String, default: "localsystem", coerce: proc { |x| x.downcase }
|
112
112
|
property :run_as_password, String, default: ""
|
113
113
|
end
|
114
114
|
end
|
@@ -38,7 +38,8 @@ class Chef
|
|
38
38
|
|
39
39
|
# Specifies the path of the location of the folder to share. The path must be fully qualified. Relative paths or paths that contain wildcard characters are not permitted.
|
40
40
|
property :path, String,
|
41
|
-
description: "The path of the folder to share. Required when creating. If the share already exists on a different path then it is deleted and re-created."
|
41
|
+
description: "The path of the folder to share. Required when creating. If the share already exists on a different path then it is deleted and re-created.",
|
42
|
+
coerce: proc { |p| p.gsub!(%r{/}, "\\") || p }
|
42
43
|
|
43
44
|
# Specifies an optional description of the SMB share. A description of the share is displayed by running the Get-SmbShare cmdlet. The description may not contain more than 256 characters.
|
44
45
|
property :description, String,
|
data/lib/chef/shell.rb
CHANGED
@@ -121,11 +121,11 @@ module Shell
|
|
121
121
|
irb_conf[:IRB_RC] = lambda do |conf|
|
122
122
|
m = conf.main
|
123
123
|
|
124
|
-
conf.prompt_c = "
|
124
|
+
conf.prompt_c = "#{Chef::Dist::EXEC}#{leader(m)} > "
|
125
125
|
conf.return_format = " => %s \n"
|
126
|
-
conf.prompt_i = "
|
127
|
-
conf.prompt_n = "
|
128
|
-
conf.prompt_s = "
|
126
|
+
conf.prompt_i = "#{Chef::Dist::EXEC}#{leader(m)} (#{Chef::VERSION})> "
|
127
|
+
conf.prompt_n = "#{Chef::Dist::EXEC}#{leader(m)} ?> "
|
128
|
+
conf.prompt_s = "#{Chef::Dist::EXEC}#{leader(m)}%l> "
|
129
129
|
conf.use_tracer = false
|
130
130
|
end
|
131
131
|
end
|
data/lib/chef/shell/ext.rb
CHANGED
@@ -211,8 +211,8 @@ module Shell
|
|
211
211
|
desc "prints information about chef"
|
212
212
|
def version
|
213
213
|
puts "This is the #{Chef::Dist::SHELL}.\n" +
|
214
|
-
" Chef Version: #{::Chef::VERSION}\n" +
|
215
|
-
"
|
214
|
+
" #{Chef::Dist::PRODUCT} Version: #{::Chef::VERSION}\n" +
|
215
|
+
" #{Chef::Dist::WEBSITE}\n" +
|
216
216
|
" https://docs.chef.io/"
|
217
217
|
:ucanhaz_automation
|
218
218
|
end
|
data/lib/chef/train_transport.rb
CHANGED
@@ -100,7 +100,7 @@ class Chef
|
|
100
100
|
tm_config = Chef::Config.target_mode
|
101
101
|
protocol = tm_config.protocol
|
102
102
|
train_config = tm_config.to_hash.select { |k| Train.options(protocol).key?(k) }
|
103
|
-
Chef::Log.trace("Using target mode options from Chef config file: #{train_config.keys.join(", ")}") if train_config
|
103
|
+
Chef::Log.trace("Using target mode options from #{Chef::Dist::PRODUCT} config file: #{train_config.keys.join(", ")}") if train_config
|
104
104
|
|
105
105
|
# Load the credentials file, and place any valid settings into the train configuration
|
106
106
|
credentials = load_credentials(tm_config.host)
|
data/lib/chef/version.rb
CHANGED
@@ -24,8 +24,6 @@ require "chef/mixin/shell_out"
|
|
24
24
|
include_flag = !(%w{amazon debian aix}.include?(ohai[:platform_family]) || (ohai[:platform_family] == "rhel" && ohai[:platform_version].to_i < 7))
|
25
25
|
|
26
26
|
describe Chef::Resource::Ifconfig, :requires_root, external: include_flag do
|
27
|
-
# This test does not work in travis because there is no eth0
|
28
|
-
|
29
27
|
include Chef::Mixin::ShellOut
|
30
28
|
|
31
29
|
let(:new_resource) do
|
@@ -25,13 +25,9 @@ require "tmpdir"
|
|
25
25
|
include_flag = !(%w{debian rhel amazon aix solaris2}.include?(ohai[:platform_family]))
|
26
26
|
|
27
27
|
describe Chef::Resource::Mount, :requires_root, external: include_flag do
|
28
|
-
# Disabled in travis because it refuses to let us mount a ramdisk. /dev/ramX does not
|
29
|
-
# exist even after loading the kernel module
|
30
|
-
|
31
28
|
include Chef::Mixin::ShellOut
|
32
29
|
|
33
30
|
# Platform specific setup, cleanup and validation helpers.
|
34
|
-
|
35
31
|
def setup_device_for_mount
|
36
32
|
# use ramdisk for creating a test device for mount.
|
37
33
|
# This can cleaner if we have chef resource/provider for ramdisk.
|
@@ -88,7 +88,7 @@ describe Chef::Util::Powershell::Cmdlet, :windows_powershell_dsc_only do
|
|
88
88
|
it "returns json format data" do
|
89
89
|
result = cmdlet_alias_requires_switch_or_argument.run({}, {}, "ls")
|
90
90
|
expect(result.succeeded?).to eq(true)
|
91
|
-
expect
|
91
|
+
expect { Chef::JSONCompat.parse(result.return_value) }.not_to raise_error
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
@@ -105,7 +105,7 @@ describe Chef::Util::Powershell::Cmdlet, :windows_powershell_dsc_only do
|
|
105
105
|
context "when constructor is given invalid arguments" do
|
106
106
|
let(:cmd_output_format) { :invalid }
|
107
107
|
it "throws an exception if an invalid format is passed to the constructor" do
|
108
|
-
expect
|
108
|
+
expect { simple_cmdlet }.to raise_error(ArgumentError)
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end
|
@@ -79,7 +79,8 @@ describe "chef_repo_path tests", :workstation do
|
|
79
79
|
EOM
|
80
80
|
end
|
81
81
|
|
82
|
-
|
82
|
+
# "Skipping for BK... As Windows 2019 has 8dot3name disabled by default"
|
83
|
+
it "knife list --local -Rfp --chef-repo-path chef_r~1 / grabs chef_repo2 stuff", :windows_only, :skip_buildkite do
|
83
84
|
Chef::Config.delete(:chef_repo_path)
|
84
85
|
knife("list --local -Rfp --chef-repo-path #{path_to("chef_r~1")} /").should_succeed <<~EOM
|
85
86
|
/clients/
|
@@ -101,7 +102,8 @@ describe "chef_repo_path tests", :workstation do
|
|
101
102
|
EOM
|
102
103
|
end
|
103
104
|
|
104
|
-
|
105
|
+
# "Skipping for BK... As Windows 2019 has 8dot3name disabled by default"
|
106
|
+
it "knife list --local -Rfp --chef-repo-path chef_r~1 / grabs chef_repo2 stuff", :windows_only, :skip_buildkite do
|
105
107
|
Chef::Config.delete(:chef_repo_path)
|
106
108
|
knife("list -z -Rfp --chef-repo-path #{path_to("chef_r~1")} /").should_succeed <<~EOM
|
107
109
|
/acls/
|
@@ -53,9 +53,9 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
53
53
|
context "and current_resource with state1=current, state2=current" do
|
54
54
|
before :each do
|
55
55
|
resource_class.load_current_value do
|
56
|
-
state1 "
|
57
|
-
state2 "
|
58
|
-
sensitive1 "
|
56
|
+
state1 "default_state1"
|
57
|
+
state2 "default_state2"
|
58
|
+
sensitive1 "default_dontprintme"
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -86,7 +86,7 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
86
86
|
expect(converged_recipe.stdout).to eq <<~EOM
|
87
87
|
* #{resource_name}[blah] action create
|
88
88
|
- update default_identity1
|
89
|
-
- set state1 to "new_state1" (was "
|
89
|
+
- set state1 to "new_state1" (was "default_state1")
|
90
90
|
EOM
|
91
91
|
end
|
92
92
|
end
|
@@ -107,8 +107,8 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
107
107
|
expect(converged_recipe.stdout).to eq <<~EOM
|
108
108
|
* #{resource_name}[blah] action create
|
109
109
|
- update default_identity1
|
110
|
-
- set state1 to "new_state1" (was "
|
111
|
-
- set state2 to "new_state2" (was "
|
110
|
+
- set state1 to "new_state1" (was "default_state1")
|
111
|
+
- set state2 to "new_state2" (was "default_state2")
|
112
112
|
EOM
|
113
113
|
end
|
114
114
|
end
|
@@ -160,7 +160,7 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
160
160
|
let(:converge_recipe) do
|
161
161
|
<<-EOM
|
162
162
|
#{resource_name} 'blah' do
|
163
|
-
state1 '
|
163
|
+
state1 'default_state1'
|
164
164
|
state2 'new_state2'
|
165
165
|
end
|
166
166
|
EOM
|
@@ -172,7 +172,7 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
172
172
|
expect(converged_recipe.stdout).to eq <<~EOM
|
173
173
|
* #{resource_name}[blah] action create
|
174
174
|
- update default_identity1
|
175
|
-
- set state2 to "new_state2" (was "
|
175
|
+
- set state2 to "new_state2" (was "default_state2")
|
176
176
|
EOM
|
177
177
|
end
|
178
178
|
end
|
@@ -181,8 +181,8 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
181
181
|
let(:converge_recipe) do
|
182
182
|
<<-EOM
|
183
183
|
#{resource_name} 'blah' do
|
184
|
-
state1 '
|
185
|
-
state2 '
|
184
|
+
state1 'default_state1'
|
185
|
+
state2 'default_state2'
|
186
186
|
end
|
187
187
|
EOM
|
188
188
|
end
|
@@ -344,8 +344,8 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
344
344
|
context "and current_resource with state1=current, state2=current" do
|
345
345
|
before :each do
|
346
346
|
resource_class.load_current_value do
|
347
|
-
state1 "
|
348
|
-
state2 "
|
347
|
+
state1 "default_state1"
|
348
|
+
state2 "default_state2"
|
349
349
|
end
|
350
350
|
end
|
351
351
|
|
@@ -377,7 +377,7 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
377
377
|
expect(converged_recipe.stdout).to eq <<~EOM
|
378
378
|
* #{resource_name}[blah] action create
|
379
379
|
- update default_identity1
|
380
|
-
- set state1 to "new_state1" (was "
|
380
|
+
- set state1 to "new_state1" (was "default_state1")
|
381
381
|
EOM
|
382
382
|
end
|
383
383
|
end
|
@@ -398,9 +398,9 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
398
398
|
expect(converged_recipe.stdout).to eq <<~EOM
|
399
399
|
* #{resource_name}[blah] action create
|
400
400
|
- update default_identity1
|
401
|
-
- set state1 to "new_state1" (was "
|
401
|
+
- set state1 to "new_state1" (was "default_state1")
|
402
402
|
- update default_identity1
|
403
|
-
- set state2 to "new_state2" (was "
|
403
|
+
- set state2 to "new_state2" (was "default_state2")
|
404
404
|
EOM
|
405
405
|
end
|
406
406
|
end
|
@@ -409,7 +409,7 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
409
409
|
let(:converge_recipe) do
|
410
410
|
<<-EOM
|
411
411
|
#{resource_name} 'blah' do
|
412
|
-
state1 '
|
412
|
+
state1 'default_state1'
|
413
413
|
state2 'new_state2'
|
414
414
|
end
|
415
415
|
EOM
|
@@ -421,7 +421,7 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
421
421
|
expect(converged_recipe.stdout).to eq <<~EOM
|
422
422
|
* #{resource_name}[blah] action create
|
423
423
|
- update default_identity1
|
424
|
-
- set state2 to "new_state2" (was "
|
424
|
+
- set state2 to "new_state2" (was "default_state2")
|
425
425
|
EOM
|
426
426
|
end
|
427
427
|
end
|
@@ -430,8 +430,8 @@ describe "Resource::ActionClass#converge_if_changed" do
|
|
430
430
|
let(:converge_recipe) do
|
431
431
|
<<-EOM
|
432
432
|
#{resource_name} 'blah' do
|
433
|
-
state1 '
|
434
|
-
state2 '
|
433
|
+
state1 'default_state1'
|
434
|
+
state2 'default_state2'
|
435
435
|
end
|
436
436
|
EOM
|
437
437
|
end
|