From 3bc0c3bec9df712810593ff9c2863236a4721900 Mon Sep 17 00:00:00 2001 From: Lamont Granquist Date: Sun, 2 Apr 2017 14:53:53 -0700 Subject: Chef-13 knife search exit 1 when no results Signed-off-by: Lamont Granquist --- lib/chef/knife/search.rb | 5 ++- spec/integration/knife/search_node_spec.rb | 39 ++++++++++++++++++++++++ spec/support/shared/integration/knife_support.rb | 2 +- 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 spec/integration/knife/search_node_spec.rb diff --git a/lib/chef/knife/search.rb b/lib/chef/knife/search.rb index 654f9ad498..c4c3380734 100644 --- a/lib/chef/knife/search.rb +++ b/lib/chef/knife/search.rb @@ -108,7 +108,7 @@ class Chef rescue Net::HTTPServerException => e msg = Chef::JSONCompat.from_json(e.response.body)["error"].first ui.error("knife search failed: #{msg}") - exit 1 + exit 99 end if ui.interchange? @@ -123,6 +123,9 @@ class Chef end end end + + # return a "failure" code to the shell so that knife search can be used in pipes similar to grep + exit 1 if result_count == 0 end def read_cli_args diff --git a/spec/integration/knife/search_node_spec.rb b/spec/integration/knife/search_node_spec.rb new file mode 100644 index 0000000000..e3cda1a138 --- /dev/null +++ b/spec/integration/knife/search_node_spec.rb @@ -0,0 +1,39 @@ +# +# Copyright:: Copyright 2013-2017, Chef Software Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +require "support/shared/integration/integration_helper" +require "support/shared/context/config" + +describe "knife node show", :workstation do + include IntegrationSupport + include KnifeSupport + + include_context "default config options" + + when_the_chef_server "has a node with a run_list" do + before do + node "cons", { run_list: ["recipe[bar]", "recipe[foo]"] } + end + + it "finds the node" do + knife("search node name:cons").should_succeed(/Node Name:\s*cons/, stderr: "1 items found\n\n") + end + + it "does not find a node" do + knife("search node name:snoc").should_fail("", stderr: "0 items found\n\n", exit_code: 1) + end + end +end diff --git a/spec/support/shared/integration/knife_support.rb b/spec/support/shared/integration/knife_support.rb index 4efa30a003..d873723784 100644 --- a/spec/support/shared/integration/knife_support.rb +++ b/spec/support/shared/integration/knife_support.rb @@ -1,6 +1,6 @@ # # Author:: John Keiser () -# Copyright:: Copyright 2013-2016, Chef Software Inc. +# Copyright:: Copyright 2013-2017, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); -- cgit v1.2.1