chef 12.11.18-universal-mingw32 → 12.12.13-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/Gemfile +4 -4
- data/Rakefile +3 -2
- data/VERSION +1 -1
- data/acceptance/Gemfile.lock +22 -23
- data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +2 -41
- data/lib/chef/application/solo.rb +7 -0
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
- data/lib/chef/data_collector.rb +79 -43
- data/lib/chef/data_collector/messages.rb +4 -33
- data/lib/chef/data_collector/messages/helpers.rb +2 -2
- data/lib/chef/data_collector/resource_report.rb +21 -11
- data/lib/chef/decorator/unchain.rb +43 -0
- data/lib/chef/exceptions.rb +5 -0
- data/lib/chef/http.rb +5 -5
- data/lib/chef/knife/cookbook_create.rb +4 -0
- data/lib/chef/knife/cookbook_site_download.rb +8 -1
- data/lib/chef/knife/cookbook_site_install.rb +8 -0
- data/lib/chef/knife/cookbook_site_list.rb +8 -1
- data/lib/chef/knife/cookbook_site_search.rb +8 -1
- data/lib/chef/knife/cookbook_site_share.rb +8 -1
- data/lib/chef/knife/cookbook_site_show.rb +14 -3
- data/lib/chef/knife/cookbook_site_unshare.rb +8 -1
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/supermarket_download.rb +33 -0
- data/lib/chef/knife/supermarket_install.rb +33 -0
- data/lib/chef/knife/supermarket_list.rb +33 -0
- data/lib/chef/knife/supermarket_search.rb +33 -0
- data/lib/chef/knife/supermarket_share.rb +33 -0
- data/lib/chef/knife/supermarket_show.rb +33 -0
- data/lib/chef/knife/supermarket_unshare.rb +33 -0
- data/lib/chef/node.rb +13 -32
- data/lib/chef/node/attribute.rb +123 -70
- data/lib/chef/node/attribute_collections.rb +9 -130
- data/lib/chef/node/common_api.rb +124 -0
- data/lib/chef/node/immutable_collections.rb +27 -2
- data/lib/chef/property.rb +6 -2
- data/lib/chef/provider.rb +4 -5
- data/lib/chef/provider/batch.rb +1 -1
- data/lib/chef/provider/directory.rb +3 -1
- data/lib/chef/provider/package/openbsd.rb +1 -1
- data/lib/chef/provider/package/rubygems.rb +9 -3
- data/lib/chef/provider/package/windows/exe.rb +2 -5
- data/lib/chef/provider/powershell_script.rb +1 -1
- data/lib/chef/provider/remote_directory.rb +2 -0
- data/lib/chef/resource.rb +22 -17
- data/lib/chef/resource_builder.rb +9 -4
- data/lib/chef/shell.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -4
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -3
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -3
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -3
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -3
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -3
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -3
- data/spec/functional/assets/chocolatey_feed/test-A.1.0.nupkg +0 -0
- data/spec/functional/assets/chocolatey_feed/test-A.1.5.nupkg +0 -0
- data/spec/functional/assets/chocolatey_feed/test-A.2.0.nupkg +0 -0
- data/spec/functional/assets/chocolatey_feed/test-B.1.0.nupkg +0 -0
- data/spec/functional/resource/dsc_script_spec.rb +1 -0
- data/spec/functional/resource/package_spec.rb +1 -1
- data/spec/functional/resource/template_spec.rb +3 -3
- data/spec/functional/shell_spec.rb +1 -1
- data/spec/integration/knife/client_bulk_delete_spec.rb +130 -0
- data/spec/integration/knife/client_create_spec.rb +69 -0
- data/spec/integration/knife/client_delete_spec.rb +63 -0
- data/spec/integration/knife/client_key_create_spec.rb +65 -0
- data/spec/integration/knife/client_key_delete_spec.rb +42 -0
- data/spec/integration/knife/client_key_list_spec.rb +60 -0
- data/spec/integration/knife/client_key_show_spec.rb +44 -0
- data/spec/integration/knife/client_list_spec.rb +48 -0
- data/spec/integration/knife/client_show_spec.rb +36 -0
- data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -0
- data/spec/integration/knife/cookbook_download_spec.rb +95 -0
- data/spec/integration/knife/cookbook_list_spec.rb +54 -0
- data/spec/integration/knife/cookbook_show_spec.rb +159 -0
- data/spec/integration/knife/cookbook_upload_spec.rb +90 -0
- data/spec/integration/knife/data_bag_create_spec.rb +58 -0
- data/spec/integration/knife/data_bag_delete_spec.rb +58 -0
- data/spec/integration/knife/data_bag_from_file_spec.rb +115 -0
- data/spec/integration/knife/data_bag_list_spec.rb +43 -0
- data/spec/integration/knife/data_bag_show_spec.rb +53 -0
- data/spec/integration/knife/environment_compare_spec.rb +74 -0
- data/spec/integration/knife/environment_create_spec.rb +40 -0
- data/spec/integration/knife/environment_delete_spec.rb +36 -0
- data/spec/integration/knife/environment_from_file_spec.rb +115 -0
- data/spec/integration/knife/environment_list_spec.rb +41 -0
- data/spec/integration/knife/environment_show_spec.rb +56 -0
- data/spec/integration/knife/node_bulk_delete_spec.rb +51 -0
- data/spec/integration/knife/node_create_spec.rb +46 -0
- data/spec/integration/knife/node_delete_spec.rb +47 -0
- data/spec/integration/knife/node_environment_set_spec.rb +42 -0
- data/spec/integration/knife/node_from_file_spec.rb +58 -0
- data/spec/integration/knife/node_list_spec.rb +44 -0
- data/spec/integration/knife/node_run_list_add_spec.rb +53 -0
- data/spec/integration/knife/node_run_list_remove_spec.rb +35 -0
- data/spec/integration/knife/node_run_list_set_spec.rb +40 -0
- data/spec/integration/knife/node_show_spec.rb +35 -0
- data/spec/integration/knife/role_bulk_delete_spec.rb +51 -0
- data/spec/integration/knife/role_create_spec.rb +40 -0
- data/spec/integration/knife/role_delete_spec.rb +47 -0
- data/spec/integration/knife/role_from_file_spec.rb +95 -0
- data/spec/integration/knife/role_list_spec.rb +44 -0
- data/spec/integration/knife/role_show_spec.rb +50 -0
- data/spec/support/shared/integration/knife_support.rb +10 -3
- data/spec/unit/application/solo_spec.rb +7 -0
- data/spec/unit/cookbook_version_spec.rb +4 -4
- data/spec/unit/data_collector/messages/helpers_spec.rb +3 -7
- data/spec/unit/data_collector/messages_spec.rb +28 -45
- data/spec/unit/data_collector_spec.rb +40 -47
- data/spec/unit/knife/cookbook_create_spec.rb +1 -0
- data/spec/unit/knife/cookbook_site_download_spec.rb +1 -0
- data/spec/unit/knife/node_environment_set_spec.rb +0 -24
- data/spec/unit/knife/node_run_list_set_spec.rb +0 -25
- data/spec/unit/node/attribute_spec.rb +7 -9
- data/spec/unit/node/immutable_collections_spec.rb +4 -0
- data/spec/unit/node/vivid_mash_spec.rb +344 -0
- data/spec/unit/node_spec.rb +115 -26
- data/spec/unit/provider/directory_spec.rb +11 -1
- data/spec/unit/provider/package/windows/exe_spec.rb +14 -9
- data/spec/unit/provider/powershell_script_spec.rb +4 -4
- data/spec/unit/provider/remote_directory_spec.rb +15 -0
- data/spec/unit/recipe_spec.rb +31 -6
- data/spec/unit/run_context_spec.rb +2 -2
- data/spec/unit/shell/shell_session_spec.rb +1 -1
- data/tasks/dependencies.rb +0 -2
- metadata +55 -786
- data/acceptance/.bundle/config +0 -2
- data/acceptance/basics/.kitchen/logs/chef-current-install-ubuntu-1404.log +0 -2
- data/acceptance/basics/.kitchen/logs/kitchen.log +0 -3
- data/acceptance/fips/.kitchen/logs/fips-integration-centos-6.log +0 -3
- data/acceptance/fips/.kitchen/logs/fips-integration-windows-2012r2.log +0 -3
- data/acceptance/fips/.kitchen/logs/fips-unit-functional-centos-6.log +0 -3
- data/acceptance/fips/.kitchen/logs/fips-unit-functional-windows-2012r2.log +0 -3
- data/acceptance/fips/.kitchen/logs/kitchen.log +0 -6
- data/acceptance/trivial/.kitchen/logs/chef-current-install-windows-2012r2.log +0 -2
- data/acceptance/trivial/.kitchen/logs/kitchen.log +0 -3
- data/acceptance/windows-service/.kitchen/logs/chef-windows-service-windows-2012r2.log +0 -2
- data/acceptance/windows-service/.kitchen/logs/kitchen.log +0 -3
@@ -145,7 +145,9 @@ class Chef
|
|
145
145
|
if ::File.exists?(@new_resource.path)
|
146
146
|
converge_by("delete existing directory #{@new_resource.path}") do
|
147
147
|
if @new_resource.recursive == true
|
148
|
-
|
148
|
+
# we don't use rm_rf here because it masks all errors, including
|
149
|
+
# IO errors or permission errors that would prvent the deletion
|
150
|
+
FileUtils.rm_r(@new_resource.path)
|
149
151
|
Chef::Log.info("#{@new_resource} deleted #{@new_resource.path} recursively")
|
150
152
|
else
|
151
153
|
::Dir.delete(@new_resource.path)
|
@@ -127,7 +127,7 @@ class Chef
|
|
127
127
|
end
|
128
128
|
|
129
129
|
def pkg_path
|
130
|
-
ENV["PKG_PATH"] || "http://ftp.OpenBSD.org/pub/#{node
|
130
|
+
ENV["PKG_PATH"] || "http://ftp.OpenBSD.org/pub/#{node["kernel"]["name"]}/#{node["kernel"]["release"]}/packages/#{node["kernel"]["machine"]}/"
|
131
131
|
end
|
132
132
|
|
133
133
|
end
|
@@ -431,17 +431,23 @@ class Chef
|
|
431
431
|
end
|
432
432
|
|
433
433
|
def current_version
|
434
|
-
#
|
434
|
+
# rubygems 2.6.3 ensures that gem lists are sorted newest first
|
435
|
+
pos = if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("2.6.3")
|
436
|
+
:first
|
437
|
+
else
|
438
|
+
:last
|
439
|
+
end
|
440
|
+
|
435
441
|
# If one or more matching versions are installed, the newest of them
|
436
442
|
# is the current version
|
437
443
|
if !matching_installed_versions.empty?
|
438
|
-
gemspec = matching_installed_versions.
|
444
|
+
gemspec = matching_installed_versions.send(pos)
|
439
445
|
logger.debug { "#{@new_resource} found installed gem #{gemspec.name} version #{gemspec.version} matching #{gem_dependency}" }
|
440
446
|
gemspec
|
441
447
|
# If no version matching the requirements exists, the latest installed
|
442
448
|
# version is the current version.
|
443
449
|
elsif !all_installed_versions.empty?
|
444
|
-
gemspec = all_installed_versions.
|
450
|
+
gemspec = all_installed_versions.send(pos)
|
445
451
|
logger.debug { "#{@new_resource} newest installed version of gem #{gemspec.name} is #{gemspec.version}" }
|
446
452
|
gemspec
|
447
453
|
else
|
@@ -78,12 +78,9 @@ class Chef
|
|
78
78
|
private
|
79
79
|
|
80
80
|
def uninstall_command(uninstall_string)
|
81
|
-
uninstall_string.
|
81
|
+
uninstall_string = "\"#{uninstall_string}\"" if ::File.exist?(uninstall_string)
|
82
82
|
uninstall_string = [
|
83
|
-
|
84
|
-
::File.dirname(uninstall_string),
|
85
|
-
%q{" },
|
86
|
-
::File.basename(uninstall_string),
|
83
|
+
uninstall_string,
|
87
84
|
expand_options(new_resource.options),
|
88
85
|
" ",
|
89
86
|
unattended_flags,
|
@@ -36,7 +36,7 @@ class Chef
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def command
|
39
|
-
basepath = is_forced_32bit ? wow64_directory : run_context.node
|
39
|
+
basepath = is_forced_32bit ? wow64_directory : run_context.node["kernel"]["os_info"]["system_directory"]
|
40
40
|
|
41
41
|
# Powershell.exe is always in "v1.0" folder (for backwards compatibility)
|
42
42
|
interpreter_path = Chef::Util::PathHelper.join(basepath, "WindowsPowerShell", "v1.0", interpreter)
|
@@ -209,6 +209,8 @@ class Chef
|
|
209
209
|
def cookbook_file_resource(target_path, relative_source_path)
|
210
210
|
res = Chef::Resource::CookbookFile.new(target_path, run_context)
|
211
211
|
res.cookbook_name = resource_cookbook
|
212
|
+
# Set the sensitivity level
|
213
|
+
res.sensitive(new_resource.sensitive)
|
212
214
|
res.source(::File.join(source, relative_source_path))
|
213
215
|
if Chef::Platform.windows? && files_rights
|
214
216
|
files_rights.each_pair do |permission, *args|
|
data/lib/chef/resource.rb
CHANGED
@@ -1529,23 +1529,6 @@ class Chef
|
|
1529
1529
|
Chef::ResourceResolver.resolve(short_name, canonical: true)
|
1530
1530
|
end
|
1531
1531
|
|
1532
|
-
# @api private
|
1533
|
-
def self.register_deprecated_lwrp_class(resource_class, class_name)
|
1534
|
-
if Chef::Resource.const_defined?(class_name, false)
|
1535
|
-
Chef::Log.warn "#{class_name} already exists! Deprecation class overwrites #{resource_class}"
|
1536
|
-
Chef::Resource.send(:remove_const, class_name)
|
1537
|
-
end
|
1538
|
-
|
1539
|
-
if !Chef::Config[:treat_deprecation_warnings_as_errors]
|
1540
|
-
Chef::Resource.const_set(class_name, resource_class)
|
1541
|
-
deprecated_constants[class_name.to_sym] = resource_class
|
1542
|
-
end
|
1543
|
-
end
|
1544
|
-
|
1545
|
-
def self.deprecated_constants
|
1546
|
-
@deprecated_constants ||= {}
|
1547
|
-
end
|
1548
|
-
|
1549
1532
|
# @api private
|
1550
1533
|
def lookup_provider_constant(name, action = :nothing)
|
1551
1534
|
begin
|
@@ -1559,6 +1542,27 @@ class Chef
|
|
1559
1542
|
end
|
1560
1543
|
end
|
1561
1544
|
|
1545
|
+
module DeprecatedLWRPClass
|
1546
|
+
|
1547
|
+
# @api private
|
1548
|
+
def register_deprecated_lwrp_class(resource_class, class_name)
|
1549
|
+
if Chef::Resource.const_defined?(class_name, false)
|
1550
|
+
Chef::Log.warn "#{class_name} already exists! Deprecation class overwrites #{resource_class}"
|
1551
|
+
Chef::Resource.send(:remove_const, class_name)
|
1552
|
+
end
|
1553
|
+
|
1554
|
+
if !Chef::Config[:treat_deprecation_warnings_as_errors]
|
1555
|
+
Chef::Resource.const_set(class_name, resource_class)
|
1556
|
+
Chef::Resource.deprecated_constants[class_name.to_sym] = resource_class
|
1557
|
+
end
|
1558
|
+
end
|
1559
|
+
|
1560
|
+
def deprecated_constants
|
1561
|
+
raise "Deprecated constants should be called only on Chef::Resource" unless self == Chef::Resource
|
1562
|
+
@deprecated_constants ||= {}
|
1563
|
+
end
|
1564
|
+
end
|
1565
|
+
|
1562
1566
|
private
|
1563
1567
|
|
1564
1568
|
def self.remove_canonical_dsl
|
@@ -1569,6 +1573,7 @@ class Chef
|
|
1569
1573
|
end
|
1570
1574
|
end
|
1571
1575
|
end
|
1576
|
+
extend DeprecatedLWRPClass
|
1572
1577
|
end
|
1573
1578
|
end
|
1574
1579
|
|
@@ -104,7 +104,11 @@ class Chef
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def is_trivial_resource?(resource)
|
107
|
-
|
107
|
+
trivial_resource = resource_class.new(name, run_context)
|
108
|
+
# force un-lazy the name property on the created trivial resource
|
109
|
+
name_property = resource_class.properties.find { |sym, p| p.name_property? }
|
110
|
+
trivial_resource.send(name_property[0]) unless name_property.nil?
|
111
|
+
identicalish_resources?(trivial_resource, resource)
|
108
112
|
end
|
109
113
|
|
110
114
|
# this is an equality test specific to checking for 3694 cloning warnings
|
@@ -124,9 +128,10 @@ class Chef
|
|
124
128
|
end
|
125
129
|
|
126
130
|
def emit_cloned_resource_warning
|
127
|
-
|
128
|
-
|
129
|
-
|
131
|
+
message = "Cloning resource attributes for #{resource} from prior resource (CHEF-3694)"
|
132
|
+
message << "\nPrevious #{prior_resource}: #{prior_resource.source_line}" if prior_resource.source_line
|
133
|
+
message << "\nCurrent #{resource}: #{resource.source_line}" if resource.source_line
|
134
|
+
Chef.log_deprecation(message)
|
130
135
|
end
|
131
136
|
|
132
137
|
def emit_harmless_cloning_debug
|
data/lib/chef/shell.rb
CHANGED
data/lib/chef/version.rb
CHANGED
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "circular-dep2::default"
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "dependency1::aa_first"
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "dependency1::default"
|
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "dependency1::zz_last"
|
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "dependency2::default"
|
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "no-default-attr::server"
|
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "test-with-circular-deps::default"
|
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
normal_unless[:attr_load_order] = []
|
2
|
+
normal[:attr_load_order] << "test-with-deps::default"
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -469,6 +469,7 @@ EOF
|
|
469
469
|
end
|
470
470
|
|
471
471
|
it "allows the use of ps_credential" do
|
472
|
+
skip("Skipped until we can adjust the test cert to meet the WMF 5 cert requirements.")
|
472
473
|
expect(user_exists?(dsc_user)).to eq(false)
|
473
474
|
powershell_script_resource.run_action(:run)
|
474
475
|
expect(File).to exist(configuration_data_path)
|
@@ -110,7 +110,7 @@ describe Chef::Resource::Template do
|
|
110
110
|
|
111
111
|
context "using single helper syntax referencing @node" do
|
112
112
|
before do
|
113
|
-
node.
|
113
|
+
node.normal[:helper_test_attr] = "value from helper method"
|
114
114
|
resource.helper(:helper_method) { "#{@node[:helper_test_attr]}" }
|
115
115
|
end
|
116
116
|
|
@@ -131,7 +131,7 @@ describe Chef::Resource::Template do
|
|
131
131
|
|
132
132
|
context "using an inline block referencing @node" do
|
133
133
|
before do
|
134
|
-
node.
|
134
|
+
node.normal[:helper_test_attr] = "value from helper method"
|
135
135
|
|
136
136
|
resource.helpers do
|
137
137
|
def helper_method
|
@@ -168,7 +168,7 @@ describe Chef::Resource::Template do
|
|
168
168
|
end
|
169
169
|
|
170
170
|
before do
|
171
|
-
node.
|
171
|
+
node.normal[:helper_test_attr] = "value from helper method"
|
172
172
|
|
173
173
|
resource.helpers(ExampleModuleReferencingATNode)
|
174
174
|
end
|
@@ -137,7 +137,7 @@ describe Shell do
|
|
137
137
|
|
138
138
|
it "sets the override_runlist from the command line" do
|
139
139
|
output, exitstatus = run_chef_shell_with("-o 'override::foo,override::bar'") do |out, keyboard|
|
140
|
-
show_recipes_code = %q[puts "#{node
|
140
|
+
show_recipes_code = %q[puts "#{node["recipes"].inspect}"]
|
141
141
|
keyboard.puts(show_recipes_code)
|
142
142
|
read_until(out, show_recipes_code)
|
143
143
|
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2013-2016, Chef Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "support/shared/integration/integration_helper"
|
18
|
+
require "support/shared/context/config"
|
19
|
+
|
20
|
+
describe "knife client bulk delete", :workstation do
|
21
|
+
include IntegrationSupport
|
22
|
+
include KnifeSupport
|
23
|
+
|
24
|
+
include_context "default config options"
|
25
|
+
|
26
|
+
when_the_chef_server "has some clients" do
|
27
|
+
before do
|
28
|
+
client "concat", {}
|
29
|
+
client "cons", {}
|
30
|
+
client "car", {}
|
31
|
+
client "cdr", {}
|
32
|
+
client "cat", {}
|
33
|
+
end
|
34
|
+
|
35
|
+
it "deletes all matching clients" do
|
36
|
+
knife("client bulk delete ^ca.*", input: "Y").should_succeed <<EOM
|
37
|
+
The following clients will be deleted:
|
38
|
+
|
39
|
+
car cat
|
40
|
+
|
41
|
+
Are you sure you want to delete these clients? (Y/N) Deleted client car
|
42
|
+
Deleted client cat
|
43
|
+
EOM
|
44
|
+
|
45
|
+
knife("client list").should_succeed <<EOM
|
46
|
+
cdr
|
47
|
+
chef-validator
|
48
|
+
chef-webui
|
49
|
+
concat
|
50
|
+
cons
|
51
|
+
EOM
|
52
|
+
end
|
53
|
+
|
54
|
+
it "deletes all matching clients when unanchored" do
|
55
|
+
knife("client bulk delete ca.*", input: "Y").should_succeed <<EOM
|
56
|
+
The following clients will be deleted:
|
57
|
+
|
58
|
+
car cat concat
|
59
|
+
|
60
|
+
Are you sure you want to delete these clients? (Y/N) Deleted client car
|
61
|
+
Deleted client cat
|
62
|
+
Deleted client concat
|
63
|
+
EOM
|
64
|
+
|
65
|
+
knife("client list").should_succeed <<EOM
|
66
|
+
cdr
|
67
|
+
chef-validator
|
68
|
+
chef-webui
|
69
|
+
cons
|
70
|
+
EOM
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
when_the_chef_server "has a validator client" do
|
75
|
+
before do
|
76
|
+
client "cons", {}
|
77
|
+
client "car", {}
|
78
|
+
client "car-validator", { validator: true }
|
79
|
+
client "cdr", {}
|
80
|
+
client "cat", {}
|
81
|
+
end
|
82
|
+
|
83
|
+
it "refuses to delete a validator normally" do
|
84
|
+
knife("client bulk delete ^ca.*", input: "Y").should_succeed <<EOM
|
85
|
+
The following clients are validators and will not be deleted:
|
86
|
+
|
87
|
+
car-validator
|
88
|
+
|
89
|
+
You must specify --delete-validators to delete the validator clients
|
90
|
+
The following clients will be deleted:
|
91
|
+
|
92
|
+
car cat
|
93
|
+
|
94
|
+
Are you sure you want to delete these clients? (Y/N) Deleted client car
|
95
|
+
Deleted client cat
|
96
|
+
EOM
|
97
|
+
|
98
|
+
knife("client list").should_succeed <<EOM
|
99
|
+
car-validator
|
100
|
+
cdr
|
101
|
+
chef-validator
|
102
|
+
chef-webui
|
103
|
+
cons
|
104
|
+
EOM
|
105
|
+
end
|
106
|
+
|
107
|
+
it "deletes a validator when told to" do
|
108
|
+
knife("client bulk delete ^ca.* -D", input: "Y\nY").should_succeed <<EOM
|
109
|
+
The following validators will be deleted:
|
110
|
+
|
111
|
+
car-validator
|
112
|
+
|
113
|
+
Are you sure you want to delete these validators? (Y/N) Deleted client car-validator
|
114
|
+
The following clients will be deleted:
|
115
|
+
|
116
|
+
car cat
|
117
|
+
|
118
|
+
Are you sure you want to delete these clients? (Y/N) Deleted client car
|
119
|
+
Deleted client cat
|
120
|
+
EOM
|
121
|
+
|
122
|
+
knife("client list").should_succeed <<EOM
|
123
|
+
cdr
|
124
|
+
chef-validator
|
125
|
+
chef-webui
|
126
|
+
cons
|
127
|
+
EOM
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2013-2016, Chef Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "support/shared/integration/integration_helper"
|
18
|
+
require "support/shared/context/config"
|
19
|
+
require "openssl"
|
20
|
+
|
21
|
+
describe "knife client create", :workstation do
|
22
|
+
include IntegrationSupport
|
23
|
+
include KnifeSupport
|
24
|
+
|
25
|
+
include_context "default config options"
|
26
|
+
|
27
|
+
let(:out) { "Created client[bah]\n" }
|
28
|
+
|
29
|
+
when_the_chef_server "is empty" do
|
30
|
+
it "creates a new client" do
|
31
|
+
knife("client create -k bah").should_succeed stderr: out
|
32
|
+
end
|
33
|
+
|
34
|
+
it "creates a new validator client" do
|
35
|
+
knife("client create -k --validator bah").should_succeed stderr: out
|
36
|
+
knife("client show bah").should_succeed <<EOM
|
37
|
+
admin: false
|
38
|
+
chef_type: client
|
39
|
+
name: bah
|
40
|
+
validator: true
|
41
|
+
EOM
|
42
|
+
end
|
43
|
+
|
44
|
+
it "refuses to add an existing client" do
|
45
|
+
pending "Knife client create must not blindly overwrite an existing client"
|
46
|
+
knife("client create -k bah").should_succeed stderr: out
|
47
|
+
expect { knife("client create -k bah") }.to raise_error(Net::HTTPServerException)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "saves the private key to a file" do
|
51
|
+
Dir.mktmpdir do |tgt|
|
52
|
+
knife("client create -f #{tgt}/bah.pem bah").should_succeed stderr: out
|
53
|
+
expect(File).to exist("#{tgt}/bah.pem")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "reads the public key from a file" do
|
58
|
+
Dir.mktmpdir do |tgt|
|
59
|
+
key = OpenSSL::PKey::RSA.generate(1024)
|
60
|
+
File.open("#{tgt}/public.pem", "w") { |pub| pub.write(key.public_key.to_pem) }
|
61
|
+
knife("client create -p #{tgt}/public.pem bah").should_succeed stderr: out
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it "refuses to run if conflicting options are passed" do
|
66
|
+
knife("client create -p public.pem --prevent-keygen blah").should_fail stderr: "FATAL: You cannot pass --public-key and --prevent-keygen\n", stdout: /^USAGE.*/
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|