lib/chef/knife/exec.rb in knife-17.10.95 vs lib/chef/knife/exec.rb in knife-17.10.163
- old
+ new
@@ -1,99 +1,99 @@
-#--
-# Author:: Daniel DeLeo (<dan@chef.io)
-# Copyright:: Copyright (c) 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_relative "../knife"
-require "chef-utils/dist" unless defined?(ChefUtils::Dist)
-
-class Chef::Knife::Exec < Chef::Knife
-
- banner "knife exec [SCRIPT] (options)"
-
- deps do
- require "chef-config/path_helper" unless defined?(ChefConfig::PathHelper)
- end
-
- option :exec,
- short: "-E CODE",
- long: "--exec CODE",
- description: "A string of #{ChefUtils::Dist::Infra::PRODUCT} code to execute."
-
- option :script_path,
- short: "-p PATH:PATH",
- long: "--script-path PATH:PATH",
- description: "A colon-separated path to look for scripts in.",
- proc: lambda { |o| o.split(":") }
-
- deps do
- require "chef/shell/ext" unless defined?(Chef::Shell::Extensions)
- end
-
- def run
- config[:script_path] = Array(config[:script_path] || Chef::Config[:script_path])
-
- # Default script paths are chef-repo/.chef/scripts and ~/.chef/scripts
- config[:script_path] << File.join(Chef::Knife.chef_config_dir, "scripts") if Chef::Knife.chef_config_dir
- ChefConfig::PathHelper.home(".chef", "scripts") { |p| config[:script_path] << p }
-
- scripts = Array(name_args)
- context = Object.new
- Shell::Extensions.extend_context_object(context)
- if config[:exec]
- context.instance_eval(config[:exec], "-E Argument", 0)
- elsif !scripts.empty?
- scripts.each do |script|
- file = find_script(script)
- context.instance_eval(IO.read(file), file, 0)
- end
- else
- puts "An interactive shell is opened"
- puts
- puts "Type your script and do:"
- puts
- puts "1. To run the script, use 'Ctrl D'"
- puts "2. To exit, use 'Ctrl/Shift C'"
- puts
- puts "Type here a script..."
- script = STDIN.read
- context.instance_eval(script, "STDIN", 0)
- end
- end
-
- def find_script(x)
- # Try to find a script. First try expanding the path given.
- script = File.expand_path(x)
- return script if File.exist?(script)
-
- # Failing that, try searching the script path. If we can't find
- # anything, fail gracefully.
- Chef::Log.trace("Searching script_path: #{config[:script_path].inspect}")
-
- config[:script_path].each do |path|
- path = File.expand_path(path)
- test = File.join(path, x)
- Chef::Log.trace("Testing: #{test}")
- if File.exist?(test)
- script = test
- Chef::Log.trace("Found: #{test}")
- return script
- end
- end
- ui.error("\"#{x}\" not found in current directory or script_path, giving up.")
- exit(1)
- end
-
-end
+#--
+# Author:: Daniel DeLeo (<dan@chef.io)
+# Copyright:: Copyright (c) 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_relative "../knife"
+require "chef-utils/dist" unless defined?(ChefUtils::Dist)
+
+class Chef::Knife::Exec < Chef::Knife
+
+ banner "knife exec [SCRIPT] (options)"
+
+ deps do
+ require "chef-config/path_helper" unless defined?(ChefConfig::PathHelper)
+ end
+
+ option :exec,
+ short: "-E CODE",
+ long: "--exec CODE",
+ description: "A string of #{ChefUtils::Dist::Infra::PRODUCT} code to execute."
+
+ option :script_path,
+ short: "-p PATH:PATH",
+ long: "--script-path PATH:PATH",
+ description: "A colon-separated path to look for scripts in.",
+ proc: lambda { |o| o.split(":") }
+
+ deps do
+ require "chef/shell/ext" unless defined?(Chef::Shell::Extensions)
+ end
+
+ def run
+ config[:script_path] = Array(config[:script_path] || Chef::Config[:script_path])
+
+ # Default script paths are chef-repo/.chef/scripts and ~/.chef/scripts
+ config[:script_path] << File.join(Chef::Knife.chef_config_dir, "scripts") if Chef::Knife.chef_config_dir
+ ChefConfig::PathHelper.home(".chef", "scripts") { |p| config[:script_path] << p }
+
+ scripts = Array(name_args)
+ context = Object.new
+ Shell::Extensions.extend_context_object(context)
+ if config[:exec]
+ context.instance_eval(config[:exec], "-E Argument", 0)
+ elsif !scripts.empty?
+ scripts.each do |script|
+ file = find_script(script)
+ context.instance_eval(IO.read(file), file, 0)
+ end
+ else
+ puts "An interactive shell is opened"
+ puts
+ puts "Type your script and do:"
+ puts
+ puts "1. To run the script, use 'Ctrl D'"
+ puts "2. To exit, use 'Ctrl/Shift C'"
+ puts
+ puts "Type here a script..."
+ script = STDIN.read
+ context.instance_eval(script, "STDIN", 0)
+ end
+ end
+
+ def find_script(x)
+ # Try to find a script. First try expanding the path given.
+ script = File.expand_path(x)
+ return script if File.exist?(script)
+
+ # Failing that, try searching the script path. If we can't find
+ # anything, fail gracefully.
+ Chef::Log.trace("Searching script_path: #{config[:script_path].inspect}")
+
+ config[:script_path].each do |path|
+ path = File.expand_path(path)
+ test = File.join(path, x)
+ Chef::Log.trace("Testing: #{test}")
+ if File.exist?(test)
+ script = test
+ Chef::Log.trace("Found: #{test}")
+ return script
+ end
+ end
+ ui.error("\"#{x}\" not found in current directory or script_path, giving up.")
+ exit(1)
+ end
+
+end