knife 18.3.0 → 18.4.2
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/lib/chef/knife/core/gem_glob_loader.rb +2 -2
- data/lib/chef/knife/core/ui.rb +1 -0
- data/lib/chef/knife/search.rb +3 -3
- data/lib/chef/knife/version.rb +1 -1
- data/spec/unit/knife/search_spec.rb +148 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdf20084b258549d98683a30f13e82c8c05ef96454c04108db37f1a2a5a71182
|
4
|
+
data.tar.gz: 0cae6131e1d8c5b05547b1f221942e84f501b0ce9685f162e308af8b868c16df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c1ff58d3324c77d44cd1168bad50e7fa94abf3be2eda9bdd8a39708b41e89f054a3b1113889c38f118adf8d85c75289f9443d3dba0675e2121ff530a645ba84
|
7
|
+
data.tar.gz: e3d0a3749aa738b7e1cb69793af8bff04a3d209442f58d0f4bdbacbcd4484b1222ce240eae440f45dbd537c73768d86bdcc0d22e4a4e0c36824382ee0b00000b
|
@@ -78,7 +78,7 @@ class Chef
|
|
78
78
|
if check_load_path
|
79
79
|
files = $LOAD_PATH.map do |load_path|
|
80
80
|
Dir["#{File.expand_path glob, ChefConfig::PathHelper.escape_glob_dir(load_path)}#{Gem.suffix_pattern}"]
|
81
|
-
end.flatten.select { |file| File.file? file
|
81
|
+
end.flatten.select { |file| File.file? file }
|
82
82
|
|
83
83
|
end
|
84
84
|
|
@@ -114,7 +114,7 @@ class Chef
|
|
114
114
|
|
115
115
|
glob = File.join(ChefConfig::PathHelper.escape_glob_dir(spec.full_gem_path, dirs), glob)
|
116
116
|
|
117
|
-
Dir[glob]
|
117
|
+
Dir[glob]
|
118
118
|
end
|
119
119
|
|
120
120
|
def from_different_chef_version?(path)
|
data/lib/chef/knife/core/ui.rb
CHANGED
@@ -41,6 +41,7 @@ class Chef
|
|
41
41
|
def_delegator :@presenter, :format_list_for_display
|
42
42
|
def_delegator :@presenter, :format_for_display
|
43
43
|
def_delegator :@presenter, :format_cookbook_list_for_display
|
44
|
+
def_delegator :@presenter, :attribute_field_separator
|
44
45
|
|
45
46
|
def initialize(stdout, stderr, stdin, config)
|
46
47
|
@stdout, @stderr, @stdin, @config = stdout, stderr, stdin, config
|
data/lib/chef/knife/search.rb
CHANGED
@@ -90,7 +90,7 @@ class Chef
|
|
90
90
|
if config[:filter_result]
|
91
91
|
search_args[:filter_result] = create_result_filter(config[:filter_result])
|
92
92
|
elsif (not ui.config[:attribute].nil?) && (not ui.config[:attribute].empty?)
|
93
|
-
search_args[:filter_result] = create_result_filter_from_attributes(ui.config[:attribute])
|
93
|
+
search_args[:filter_result] = create_result_filter_from_attributes(ui.config[:attribute], ui.attribute_field_separator)
|
94
94
|
elsif config[:id_only]
|
95
95
|
search_args[:filter_result] = create_result_filter_from_attributes([])
|
96
96
|
end
|
@@ -179,10 +179,10 @@ class Chef
|
|
179
179
|
final_filter
|
180
180
|
end
|
181
181
|
|
182
|
-
def create_result_filter_from_attributes(filter_array)
|
182
|
+
def create_result_filter_from_attributes(filter_array, separator = ".")
|
183
183
|
final_filter = {}
|
184
184
|
filter_array.each do |f|
|
185
|
-
final_filter[f] = f.split(
|
185
|
+
final_filter[f] = f.split(separator)
|
186
186
|
end
|
187
187
|
# adding magic filter so we can actually pull the name as before
|
188
188
|
final_filter["__display_name"] = [ "name" ]
|
data/lib/chef/knife/version.rb
CHANGED
@@ -0,0 +1,148 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Ashique Saidalavi (<ashique.saidalavi@progress.com>)
|
3
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require "knife_spec_helper"
|
20
|
+
|
21
|
+
describe Chef::Knife::Search do
|
22
|
+
describe "node" do
|
23
|
+
let(:knife) { Chef::Knife::Search.new }
|
24
|
+
let(:query) { double("Chef::Search::Query") }
|
25
|
+
let(:stdout) { StringIO.new }
|
26
|
+
let(:stderr) { StringIO.new }
|
27
|
+
|
28
|
+
before(:each) do
|
29
|
+
node = Chef::Node.new.tap do |n|
|
30
|
+
n.automatic_attrs["fqdn"] = "foobar"
|
31
|
+
n.automatic_attrs["ohai_time"] = 1343845969
|
32
|
+
n.automatic_attrs["platform"] = "mac_os_x"
|
33
|
+
n.automatic_attrs["platform_version"] = "10.12.5"
|
34
|
+
end
|
35
|
+
|
36
|
+
allow(query).to receive(:search).and_yield(node)
|
37
|
+
allow(Chef::Search::Query).to receive(:new).and_return(query)
|
38
|
+
|
39
|
+
allow(knife).to receive(:output).and_return(true)
|
40
|
+
allow(knife.ui).to receive(:stdout).and_return(stdout)
|
41
|
+
allow(knife.ui).to receive(:stderr).and_return(stderr)
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "run" do
|
45
|
+
it "should be successful" do
|
46
|
+
knife.name_args = ["node", ":"]
|
47
|
+
expect(query).to receive(:search).with("node", ":", { fuzz: true })
|
48
|
+
knife.run
|
49
|
+
end
|
50
|
+
|
51
|
+
context "read_cli_args" do
|
52
|
+
it "should be invoked" do
|
53
|
+
expect(knife).to receive(:read_cli_args)
|
54
|
+
knife.run
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should raise error if query passed with argument as well as -q option" do
|
58
|
+
knife.name_args = ["node", ":"]
|
59
|
+
knife.config[:query] = ":"
|
60
|
+
|
61
|
+
expect { knife.run }.to raise_error(SystemExit)
|
62
|
+
expect(stderr.string).to match /Please specify query as an argument or an option via -q, not both/im
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should fail if no query passed" do
|
66
|
+
knife.name_args = []
|
67
|
+
|
68
|
+
expect { knife.run }.to raise_error(SystemExit)
|
69
|
+
expect(stderr.string).to match /No query specified/im
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "filters" do
|
74
|
+
before do
|
75
|
+
knife.name_args = ["node", "packages:git"]
|
76
|
+
knife.config[:filter_result] = "env=chef_environment"
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should invoke create_result_filter" do
|
80
|
+
expect(knife).to receive(:create_result_filter).with("env=chef_environment")
|
81
|
+
knife.run
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should invoke search object with correct filter" do
|
85
|
+
expect(query).to receive(:search).with("node", "packages:git", { filter_result: { env: ["chef_environment"] }, fuzz: true })
|
86
|
+
knife.run
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "attributes" do
|
91
|
+
before do
|
92
|
+
knife.name_args = ["node", "packages:git"]
|
93
|
+
knife.ui.config[:attribute] = ["packages.git.version"]
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should invoke create_result_filter_from_attributes method" do
|
97
|
+
expect(knife).to receive(:create_result_filter_from_attributes).with(["packages.git.version"], knife.ui.attribute_field_separator)
|
98
|
+
knife.run
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should invoke search query with correct filter" do
|
102
|
+
filter_obj = {
|
103
|
+
filter_result: {
|
104
|
+
"__display_name" => ["name"],
|
105
|
+
"packages.git.version" => %w{packages git version} },
|
106
|
+
fuzz: true,
|
107
|
+
}
|
108
|
+
expect(query).to receive(:search).with("node", "packages:git", filter_obj)
|
109
|
+
knife.run
|
110
|
+
end
|
111
|
+
|
112
|
+
context "field_separator" do
|
113
|
+
it "should have dot as the default field_separator" do
|
114
|
+
expect(knife.ui.attribute_field_separator).to eq(".")
|
115
|
+
end
|
116
|
+
|
117
|
+
it "has the correct field_separator" do
|
118
|
+
knife.config[:field_separator] = ":"
|
119
|
+
|
120
|
+
expect(knife.ui.attribute_field_separator).to eq(":")
|
121
|
+
end
|
122
|
+
|
123
|
+
context "parsing" do
|
124
|
+
before do
|
125
|
+
knife.name_args = %w{node packages:git}
|
126
|
+
end
|
127
|
+
|
128
|
+
it "parses the attributes correctly for dot field_separator" do
|
129
|
+
knife.config[:field_separator] = "."
|
130
|
+
knife.ui.config[:attribute] = ["packages.git.version"]
|
131
|
+
|
132
|
+
filter_output = { "__display_name" => ["name"], "packages.git.version" => %w{packages git version} }
|
133
|
+
expect(knife.create_result_filter_from_attributes(["packages.git.version"], ".")).to eq(filter_output)
|
134
|
+
end
|
135
|
+
|
136
|
+
it "parses it for different field_separator" do
|
137
|
+
knife.config[:field_separator] = ":"
|
138
|
+
knife.ui.config[:attribute] = ["packages:git:version"]
|
139
|
+
|
140
|
+
filter_output = { "__display_name" => ["name"], "packages:git:version" => %w{packages git version} }
|
141
|
+
expect(knife.create_result_filter_from_attributes(["packages:git:version"], ":")).to eq(filter_output)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 18.
|
4
|
+
version: 18.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|
@@ -1098,6 +1098,7 @@ files:
|
|
1098
1098
|
- spec/unit/knife/role_run_list_replace_spec.rb
|
1099
1099
|
- spec/unit/knife/role_run_list_set_spec.rb
|
1100
1100
|
- spec/unit/knife/role_show_spec.rb
|
1101
|
+
- spec/unit/knife/search_spec.rb
|
1101
1102
|
- spec/unit/knife/ssh_spec.rb
|
1102
1103
|
- spec/unit/knife/ssl_check_spec.rb
|
1103
1104
|
- spec/unit/knife/ssl_fetch_spec.rb
|
@@ -1144,7 +1145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1144
1145
|
- !ruby/object:Gem::Version
|
1145
1146
|
version: '0'
|
1146
1147
|
requirements: []
|
1147
|
-
rubygems_version: 3.
|
1148
|
+
rubygems_version: 3.2.33
|
1148
1149
|
signing_key:
|
1149
1150
|
specification_version: 4
|
1150
1151
|
summary: The knife CLI for Chef Infra.
|