summaryrefslogtreecommitdiff
path: root/distro/common/man/man1/knife-exec.1
diff options
context:
space:
mode:
authorjamescott <jamescott@opscode.com>2013-10-18 12:59:08 -0700
committersersut <serdar@opscode.com>2013-10-18 13:42:10 -0700
commit957f369948268d00c071d30db0519354d560bfef (patch)
treec944c7d309c9eeec04782ea5ecf7c30a42d17de6 /distro/common/man/man1/knife-exec.1
parent16fbe1b5225abd6cfcf2c86f0f59fe7ae46ead45 (diff)
downloadchef-957f369948268d00c071d30db0519354d560bfef.tar.gz
Update the man pages for chef & knife.
Diffstat (limited to 'distro/common/man/man1/knife-exec.1')
-rw-r--r--distro/common/man/man1/knife-exec.1352
1 files changed, 317 insertions, 35 deletions
diff --git a/distro/common/man/man1/knife-exec.1 b/distro/common/man/man1/knife-exec.1
index ca9c455bb5..962ec4079e 100644
--- a/distro/common/man/man1/knife-exec.1
+++ b/distro/common/man/man1/knife-exec.1
@@ -1,43 +1,325 @@
-.\" generated with Ronn/v0.7.3
-.\" http://github.com/rtomayko/ronn/tree/0.7.3
+.TH "KNIFE-EXEC" "1" "Chef 11.8.0" "" "knife exec"
+.SH NAME
+knife-exec \- The man page for the knife exec subcommand.
.
-.TH "KNIFE\-EXEC" "1" "October 2013" "Chef 11.10.0.alpha.0" "Chef Manual"
+.nr rst2man-indent-level 0
.
-.SH "NAME"
-\fBknife\-exec\fR \- Run user scripts using the Chef API DSL
-.
-.SH "SYNOPSIS"
-\fBknife\fR \fBexec\fR \fI(options)\fR
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.\" Man page generated from reStructuredText.
.
+.sp
+The \fBknife exec\fP subcommand uses the Knife configuration file to execute Ruby scripts in the context of a fully configured chef\-client. This subcommand is most often used to run scripts that will only access server one time (or otherwise very infrequently). Use this subcommand any time that an operation does not warrant full usage of the Knife subcommand library.
+.sp
+For Ruby scripts that will be run using the \fBexec\fP subcommand, note the following:
+.INDENT 0.0
+.INDENT 3.5
+.INDENT 0.0
+.IP \(bu 2
+The Ruby script must be located on the system from which Knife is run (and not be located on any of the systems that Knife will be managing).
+.IP \(bu 2
+Shell commands will be run from a management workstation. For example, something like \fB%x[ls \-lash /opt/only\-on\-a\-node]\fP would give you the directory listing for the "opt/only\-on\-a\-node" directory or a "No such file or directory" error if the file does not already exist locally.
+.IP \(bu 2
+When the chef\-shell DSL is available, the chef\-client DSL will not be (unless the management workstation is also a chef\-client). Without the chef\-client DSL, a bash block cannot be used to run bash commands.
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.sp
+\fBCommon Options\fP
+.sp
+The following options can be run with all Knife sub\-commands and plug\-ins:
+.INDENT 0.0
.TP
-\fB\-E\fR, \fB\-\-exec CODE\fR
-Provide a snippet of code to evaluate on the command line
-.
-.SH "DESCRIPTION"
-\fBknife exec\fR runs arbitrary ruby scripts in a context similar to that of the chef\-shell(1) DSL\. See the chef\-shell documentation for a description of the commands available\.
-.
-.SH "EXAMPLES"
-.
+.B \fB\-c CONFIG\fP, \fB\-\-config CONFIG\fP
+The configuration file to use.
.TP
-Make an API call against an arbitrary endpoint
-knife exec \-E \'api\.get("nodes/fluke\.localdomain/cookbooks")\' => list of cookbooks for the node \fIfluke\.localdomain\fR
-.
+.B \fB\-\-color\fP
+Indicates that colored output will be used.
.TP
-Remove the role \fIobsolete\fR from all nodes
-knife exec \-E \'nodes\.transform(:all){|n| n\.run_list\.delete("role[obsolete]")}\'
-.
+.B \fB\-d\fP, \fB\-\-disable\-editing\fP
+Indicates that $EDITOR will not be opened; data will be accepted as\-is.
.TP
-Generate the expanded run list for hosts in the \fBwebserver\fR role
-knife exec \-E \'nodes\.find(:roles => "webserver") {|n| n\.expand!; n[:recipes]}\'
-.
-.SH "SEE ALSO"
-\fBchef\-shell(1)\fR
-.
-.SH "AUTHOR"
-Chef was written by Adam Jacob \fIadam@opscode\.com\fR with many contributions from the community\.
-.
-.SH "DOCUMENTATION"
-This manual page was written by Joshua Timberman \fIjoshua@opscode\.com\fR\. Permission is granted to copy, distribute and / or modify this document under the terms of the Apache 2\.0 License\.
+.B \fB\-\-defaults\fP
+Indicates that Knife will use the default value, instead of asking a user to provide one.
+.TP
+.B \fB\-e EDITOR\fP, \fB\-\-editor EDITOR\fP
+The $EDITOR that is used for all interactive commands.
+.TP
+.B \fB\-E ENVIRONMENT\fP, \fB\-\-environment ENVIRONMENT\fP
+The name of the environment. When this option is added to a command, the command will run only against the named environment.
+.TP
+.B \fB\-f FILE_NAME\fP, \fB\-\-file FILE_NAME\fP
+Indicates that the private key will be saved to a specified file name.
+.TP
+.B \fB\-F FORMAT\fP, \fB\-\-format FORMAT\fP
+The output format: \fBsummary\fP (default), \fBtext\fP, \fBjson\fP, \fByaml\fP, and \fBpp\fP.
+.TP
+.B \fB\-h\fP, \fB\-\-help\fP
+Shows help for the command.
+.TP
+.B \fB\-k KEY\fP, \fB\-\-key KEY\fP
+The private key that Knife will use to sign requests made by the API client to the server.
+.TP
+.B \fB\-\-no\-color\fP
+Indicates that color will not be used in the output.
+.TP
+.B \fB\-p PASSWORD\fP, \fB\-\-password PASSWORD\fP
+The user password.
+.TP
+.B \fB\-\-print\-after\fP
+Indicates that data will be shown after a destructive operation.
+.TP
+.B \fB\-s URL\fP, \fB\-\-server\-url URL\fP
+The URL for the server.
+.TP
+.B \fB\-u USER\fP, \fB\-\-user USER\fP
+The user name used by Knife to sign requests made by the API client to the server. Authentication will fail if the user name does not match the private key.
+.TP
+.B \fB\-v\fP, \fB\-\-version\fP
+The version of the chef\-client.
+.TP
+.B \fB\-V\fP, \fB\-\-verbose\fP
+Set for more verbose outputs. Use \fB\-VV\fP for maximum verbosity.
+.TP
+.B \fB\-y\fP, \fB\-\-yes\fP
+Indicates that the response to all confirmation prompts will be "Yes" (and that Knife will not ask for confirmation).
+.UNINDENT
+.sp
+\fBAuthenticated API Requests\fP
+.sp
+The \fBknife exec\fP subcommand can be used to make authenticated API requests to the server using the following methods:
+.TS
+center;
+|l|l|.
+_
+T{
+Method
+T} T{
+Description
+T}
+_
+T{
+\fBapi.delete\fP
+T} T{
+Use to delete an object from the server.
+T}
+_
+T{
+\fBapi.get\fP
+T} T{
+Use to get the details of an object on the server.
+T}
+_
+T{
+\fBapi.post\fP
+T} T{
+Use to add an object to the server.
+T}
+_
+T{
+\fBapi.put\fP
+T} T{
+Use to update an object on the server.
+T}
+_
+.TE
+.sp
+These methods are used with the \fB\-E\fP option, which executes that string locally on the workstation using chef\-shell. These methods have the following syntax:
+.sp
+.nf
+.ft C
+$ knife exec \-E \(aqapi.method(/endpoint)\(aq
+.ft P
+.fi
+.sp
+where:
+.INDENT 0.0
+.IP \(bu 2
+\fBapi.method\fP is the corresponding authentication method \-\-\- \fBapi.delete\fP, \fBapi.get\fP, \fBapi.post\fP, or \fBapi.put\fP
+.IP \(bu 2
+\fB/endpoint\fP is an endpoint in the Chef Server API
+.UNINDENT
+.sp
+For example, to get the data for a node named "Example_Node":
+.sp
+.nf
+.ft C
+$ knife exec \-E \(aqputs api.get("/nodes/Example_Node")\(aq
+.ft P
+.fi
+.sp
+and to ensure that the output is visible in the console, add the \fBputs\fP in front of the API authorization request:
+.sp
+.nf
+.ft C
+$ knife exec \-E \(aqputs api.get("/nodes/Example_Node")\(aq
+.ft P
+.fi
+.sp
+where \fBputs\fP is the shorter version of the \fB$stdout.puts\fP predefined variable in Ruby.
+.sp
+The following example shows how to add a client named "IBM305RAMAC" and the \fB/clients\fP endpoint, and then return the private key for that user in the console:
+.sp
+.nf
+.ft C
+$ client_desc = {
+ "name" => "IBM305RAMAC",
+ "admin" => false
+ }
+
+ new_client = api.post("/clients", client_desc)
+ puts new_client["private_key"]
+.ft P
+.fi
+.sp
+\fBSyntax\fP
+.sp
+This argument has the following syntax:
+.sp
+.nf
+.ft C
+$ knife exec SCRIPT (options)
+.ft P
+.fi
+.sp
+\fBOptions\fP
+.sp
+This subcommand has the following options:
+.INDENT 0.0
+.TP
+.B \fB\-E CODE\fP, \fB\-\-exec CODE\fP
+A string of code that will be executed.
+.TP
+.B \fB\-p PATH:PATH\fP, \fB\-\-script\-path PATH:PATH\fP
+A colon\-separated path at which Ruby scripts are located.
+.UNINDENT
+.sp
+\fBExamples\fP
+.sp
+There are three ways to use \fBknife exec\fP to run Ruby script files. For example:
+.sp
+.nf
+.ft C
+$ knife exec /path/to/script_file
+.ft P
+.fi
+.sp
+Or:
+.sp
+.nf
+.ft C
+$ knife exec \-E \(aqRUBY CODE\(aq
+.ft P
+.fi
+.sp
+Or:
+.sp
+.nf
+.ft C
+$ knife exec
+RUBY CODE
+^D
+.ft P
+.fi
+.sp
+To check the status of Knife using a Ruby script named "status.rb" (which looks like):
+.sp
+.nf
+.ft C
+printf "%\-5s %\-12s %\-8s %s\en", "Check In", "Name", "Ruby", "Recipes"
+nodes.all do |n|
+ checkin = Time.at(n[\(aqohai_time\(aq]).strftime("%F %R")
+ rubyver = n[\(aqlanguages\(aq][\(aqruby\(aq][\(aqversion\(aq]
+ recipes = n.run_list.expand(_default).recipes.join(", ")
+ printf "%\-20s %\-12s %\-8s %s\en", checkin, n.name, rubyver, recipes
+end
+.ft P
+.fi
+.sp
+and is located in a directory named "scripts", enter:
+.sp
+.nf
+.ft C
+$ knife exec scripts/status.rb
+.ft P
+.fi
+.sp
+To show the available free memory for all nodes, enter:
+.sp
+.nf
+.ft C
+$ knife exec \-E \(aqnodes.all {|n| puts "#{n.name} has #{n.memory.total} free memory"}\(aq
+.ft P
+.fi
+.sp
+To list all of the available search indexes, enter:
+.sp
+.nf
+.ft C
+$ knife exec \-E \(aqputs api.get("search").keys\(aq
+.ft P
+.fi
+.sp
+To query a node for multiple attributes using a Ruby script named \fBsearch_attributes.rb\fP (which looks like):
+.sp
+.nf
+.ft C
+% cat scripts/search_attributes.rb
+query = ARGV[2]
+attributes = ARGV[3].split(",")
+puts "Your query: #{query}"
+puts "Your attributes: #{attributes.join(" ")}"
+results = {}
+search(:node, query) do |n|
+ results[n.name] = {}
+ attributes.each {|a| results[n.name][a] = n[a]}
+end
+
+puts results
+exit 0
+.ft P
+.fi
+.sp
+enter:
+.sp
+.nf
+.ft C
+% knife exec scripts/search_attributes.rb "hostname:test_system" ipaddress,fqdn
+.ft P
+.fi
+.sp
+to return something like:
+.sp
+.nf
+.ft C
+Your query: hostname:test_system
+Your attributes: ipaddress fqdn
+{"test_system.example.com"=>{"ipaddress"=>"10.1.1.200", "fqdn"=>"test_system.example.com"}}
+.ft P
+.fi
+.SH AUTHOR
+Opscode
+.\" Generated by docutils manpage writer.
.
-.SH "CHEF"
-Knife is distributed with Chef\. \fIhttp://wiki\.opscode\.com/display/chef/Home\fR