cli script

cli script(1)					  BIG-IP TMSH Manual					cli script(1)

NAME
       script - Automates tmsh using Tool Command Language (Tcl).

MODULE
       cli

SYNTAX
       Configure the script component within the cli module using the syntax shown in the following sections.

   EDIT
	create script [name]
	modify script [name]
	 options:
	  app-service [[string] | none]
	  description [string]
	  ignore-verification [true | false]
	  script-checksum [[string] | none]
	  script-signature [[string] | none]

	edit script [ [ [name] | [glob] | [regex] ] ... ]
	 options:
	  all-properties

   DISPLAY
	list script
	list script [ [ [name] | [glob] | [regex] ] ... ]
	show running-config script
	show running-config script [ [ [name] | [glob] | [regex] ] ... ]
	 options:
	  all-properties

   DELETE
	delete script [name]

   GENERATE
       Note: generate cryptographic signature or checksum based on cli script text.

	generate cli script [name]
	  options:
	    checksum
	    signature

   RUN
	run script [name] [options ...]
	  options:
	    file [file name] [options ...]
	    verbatim-arguments [file option] [file name] [options ...]

       The options that are available depend on which script you are running.

       The file option is limited to users with the role of administrator.

DESCRIPTION
       You can use the script component to build Tcl scripts to automate management of the BIG-IP(r) system. By
       combining command aliases with scripts, you can extend tmsh to build commands that are customized to your
       environment.

       To do this, place the content of the script inside one or more Tcl procedures. The content of a script cannot
       exceed 65,000 bytes. However, a script can include other scripts. For more information about including scripts
       in other scripts, see tmsh::include following.

       Starting with BIGIP 11.5.0, tmsh commands are versioned. The tmsh active version should be specified in
       scripts. This will avoid breaking scripts due to changes in tmsh syntax in the different versions. See
       examples below for how to use it in a script. Without tmsh active version specified, scripts will run on the
       current active version. By default, the active version will be the latest cli version.

       You can use the following procedures in the manner specified:

       script::run
	    tmsh invokes the procedure script::run when you issue the command sequence run / cli script [name]. A
	    script is run relative to the module in which the run command is invoked.

	    The script::run procedure must be defined in the script named by the run command. Scripts that are
	    included by tmsh::include are not required to implement the procedure script::run.

       script::help
	    Provides context sensitive help. A script is not required to implement script::help.

       script::tabc
	    Provides context sensitive help. A script is not required to implement script::tabc.

       script::init
	    tmsh calls the procedure script::init before calling one of the following procedures: script::run,
	    script::help, or script::tabc. The script::init procedure can use the Tcl variable tmsh::csh to determine
	    which one of these three procedures tmsh invokes after tmsh:init.

	    Additionally, you can use the procedure script::init to initialize global variables. A script is not
	    required to implement script::init.

EXAMPLES
       edit script myscript

       Creates or modifies the script myscript.

       edit script myscript yourscript

       Creates or modifies the scripts myscript and yourscript at the same time.

       list script myscript

       Displays the contents of the script myscript.

       delete script [name]

       Deletes the script myscript from the system.

       run script myscript [arguments ...]

       Runs the script myscript. The system passes arguments to the script in the following Tcl variables:

       ·   tmsh::argc contains the number of arguments including the name of the script.

       ·   tmsh::argv contains the list of argument values. The first item in tmsh::argv is always the name of the
	   script.

       Tip: You can create an alias for the command sequence run / cli script [name] using the cli alias component.
       For more information, see help cli alias.

       run script verbatim-arguments myscript [arguments ...]

       Runs the same commands as run script myscript [arguments...] above, except the system passes all arguments
       specified in the command as one argument to the script. Note that you do not need to enclose the argument list
       in double quotes, and you do not need to escape special characters.

       generate my_script checksum

       Generate a checksum for the script text and add the checksum as a property.

       generate my_script signature signing-key my_key

       Generate a signature for the script text using the specified private key and add the signature as a property.

       Note: For a script which includes a checksum or signature to successfully load, the script text contents must
       match the stored checksum or signature.	To temporarily stop the verification of signature or checksum and
       still retain the checksum or signature, the ignore-verification attribute must be set to true. This is done by
       editing the script and adding the ignore-verification attribute.

       To completely clear the signature or checksum, simply set the attribute script-signature or script-checksum to
       empty string "". By doing so, the script will be processed as if it was never signed or checksumed.

       modify script /Common/my_script { proc script::init {} { }

       proc script::run {} { }

       proc script::help {} { }

       proc script::tabc {} { }
	   ignore-verification true
	   script-checksum 74778e7b13016e0b9329a17f8d2da601
	   total-signing-status checksum
	   verification-status checksum-verified }

OPTIONS
       app-service
	    Specifies the name of the application service to which the object belongs. The default value is none.
	    Note: If the strict-updates option is enabled on the application service that owns the object, you cannot
	    modify or delete the object. Only the application service can modify or delete the object.

       checksum
	    Generate a checksum for the script text and add the checksum to the script as a property.  Only for use
	    with the generate command.

       description
	    A user defined description.

       file Specifies that the script to be run should come from a file located on the file system rather than a
	    script from the configuration.

       glob Displays the scripts that match the glob expression. See help glob for a description of glob expression
	    syntax.

       name Specifies a unique name for the script. This option is required for the edit and delete commands.

       regex
	    Displays the scripts that match the regular expression. The regular expression must be preceded by an at
	    sign (@[regular expression]) to indicate that the identifier is a regular expression. See help regex for
	    a description of regular expression syntax.

       signature
	    Generate a signature for the script text using the specified private key and add the signature to the
	    script as a property. Only for use with the generate command.

       signing-key
	    The private key to use for signing the script. Only for use with the signature option.

       verbatim-arguments
	    Specifies that the arguments at the end of the command should not be tokenized by tmsh prior to being
	    sent to the script. This is useful when the script is wrapping another utility that takes arguments.

CONFIGURATION AND STATUS ACCESSORS
       The following Tcl commands mirror tmsh commands. For example, the Tcl tmsh::create command accepts the same
       components, object identifiers, and properties that the tmsh create command accepts.

       tmsh::cd [args...]
	    Runs the cd command using the specified arguments.

       tmsh::cp [args...]
	    Runs the cp command using the specified arguments.

       tmsh::create [args...]
	    Runs the create command using the specified arguments.

       tmsh::delete [args...]
	    Runs the delete command using the specified arguments.

       tmsh::install [args...]
	    Runs the install command using the specified arguments.

       tmsh::generate [args...]
	    Runs the generate command using the specified arguments.

       tmsh::list [args...]
	    Runs the list command using the specified arguments. The system returns the results as a string.

       tmsh::load [args...]
	    Runs the load command using the specified arguments.

       tmsh::modify [args...]
	    Runs the modify command using the specified arguments.

       tmsh::publish [args...]
	    Runs the publish command using the specified arguments.

       tmsh::pwd
	    Runs the pwd command.

       tmsh::reset-stats [args...]
	    Runs the reset-stats command using the specified arguments.

       tmsh::restart [args...]
	    Runs the command restart using the specified arguments.

       tmsh::run [args...]
	    Runs the run command using the specified arguments.

       tmsh::save [args...]
	    Runs the save command using the specified arguments.

       tmsh::show [args...]
	    Runs the show command using the specified arguments. The system returns the results as a string.

       tmsh::start [args...]
	    Runs the command start using the specified arguments.

       tmsh::stop [args...]
	    Runs the command stop using the specified arguments.

       The following Tcl commands provide structured access for retrieving configuration, statistics, and status
       information.

       tmsh::get_config [args...]
	    Returns a list of Tcl objects. Each of these objects can be passed to the commands that accept an $obj
	    argument. The arguments for this command are the same as for the tmsh list command.

       tmsh::get_status [component] [args...]
	    Returns a list of Tcl objects that can be passed to the following commands that accept an $obj argument.
	    The arguments to this command are the same as the tmsh show command.

	    This command can only be used on components that accept the field-fmt option. The field-fmt option is
	    automatically appended to the argument list. The tmsh help pages identify if a component supports the
	    field-fmt option.

	    That there are very few components that have status and statistics that do not support the field-fmt
	    option, and in those cases you can use the Tcl  tmsh::show command to retrieve the object in the form of
	    a Tcl string object.

	    A component must be specified, for example, tmsh::get_status ltm pool.

       tmsh::get_type $obj
	    Returns the type identifier associated with the object. The $obj argument must be an object that was
	    returned by either of the Tcl tmsh::get_config or tmsh::get_status commands.

       tmsh::get_name $obj
	    Returns the object identifier associated with the object. The $obj argument must be an object that was
	    returned by either of the Tcl commands tmsh::get_config or tmsh::get_status.

       tmsh::get_field_names [value | nested] $obj
	    Returns a list of field names (not the value associated with a field) that are present in an object. The
	    value fields are simple values or lists (for example, an integer or a string). The nested fields are a
	    collection of zero or more nested objects, where the nested objects have their own fields (for example,
	    pool members, and virtual server profiles).

	    The $obj argument must be an object that was returned by the Tcl tmsh::get_config or tmsh::get_status
	    commands. If the object was retrieved using the Tcl tmsh::get_config command, the field names are
	    identical to those that are displayed by the tmsh list command. If the object was retrieved using the Tcl
	    tmsh::get_status command, the fields are identical to those that the system displays using the tmsh show
	    command with the field-fmt option.

       tmsh::get_field_value $obj [field name] [Tcl variable]
	    Retrieves the value of field name.

	    The Tcl variable is optional. The behavior of this command depends on whether field name is present in
	    $obj and a Tcl variable is present in the command.

	    ·	 If field name is present in $obj, and a Tcl variable is present, the Tcl variable is set to the
		 value of field name and the command returns 1.

	    ·	 If field name is not present in $obj, and a Tcl variable is present, the command returns 0 (zero).

	    ·	 If field name is present in $obj, and a Tcl variable is not present, the command returns the field
		 value.

	    ·	 If field name is not present in $obj, and a Tcl variable is not present, the command raises an error
		 that causes the script to stop. You can use the Tcl command catch to recognize the error and
		 continue to run the script.

	    The $obj argument must be an object that was returned by the Tcl tmsh::get_config or tmsh::get_status
	    commands, or a nested object obtained from the Tcl tmsh::get_field_value command.

	    If the field is a set of nested objects, the Tcl object that the system returns is a list of objects,
	    where each of the objects can contain fields. Each of the objects can be passed to the Tcl
	    tmsh::get_field_value command. If the field is not a nested object the system returns a single Tcl string
	    object.

TRANSACTION CONTROL
       The following Tcl commands are specific to the tmsh Tcl API. There are no corresponding commands available in
       tmsh.

       tmsh::begin_transaction
	    Begins an update transaction. The Tcl tmsh::create, tmsh::delete, and tmsh::modify commands that are
	    issued before the next Tcl tmsh::commit_transaction command are submitted as a single update.

	    The system rolls back all of the commands if any of the commands fail.

       tmsh::commit_transaction
	    Runs the commands that have been issued since the last Tcl tmsh::begin_transaction command. The system
	    validates all of the commands against the running configuration. If any one of the commands fail, the
	    system does not apply any of the commands to the running configuration.

       tmsh::cancel_transaction
	    Cancels all commands that you have issued since the last Tcl tmsh::begin_transaction command.

       Important: You cannot use these Tcl commands inside an active transaction:

       ·    tmsh::list

       ·    tmsh::show

       ·    tmsh::get_config

       ·    tmsh::get_status

LOGGING
       You can use the following Tcl commands to generate log events. These commands affect the behavior of the
       script and do not affect tmsh. These commands are available only to users who have been assigned either the
       Administrator or Resource Administrator role.

       tmsh::log_dest [screen | file]
	    Specifies whether the system sends events to the screen or to log files. If file is selected, log
	    messages will be directed to /var/log/ltm.

       tmsh::log_level [level]
	    Specifies the default severity level. The system does not log events below the specified level. The
	    options, listed in decreasing order of severity, are:

	    ·	 emerg

	    ·	 alert

	    ·	 crit

	    ·	 err

	    ·	 warning

	    ·	 notice

	    ·	 info

	    ·	 debug

       tmsh::log [level] "message..."
	    Logs the specified message. The level parameter is optional. The level can be one of those described in
	    the Tcl tmsh::log_level command.

CUSTOM ISTATS
       Custom counter, gauge, and string fields may be created, modified, and retrieved using iRules or tmsh scripts.
       These custom fields are created on first write and do not need to be declared separately.

       Each custom field has a "key" that can be associated with a tmsh configuration object. This key is composed of
       a tmsh component dotted path, a specific object name or ID, the field type, and the field name. The entire key
       must be enclosed in quotes.

       For example, "ltm.pool /Common/my_pool counter num_hits" refers to the num_hits counter associated with the
       LTM pool named my_pool, located in the Common folder.

       These custom fields are displayed with the tmsh show command on the associated object.

       istats::incr [key] [amount]
	    Increments a custom counter by amount.

       istats::set [key] [value]
	    Sets a custom gauge or string to value. Setting a counter to an exact value will only set it in the local
	    segment, but istats::get will always read the aggregated (not local) value.

       istats::get [key]
	    Returns the latest aggregated value of the custom field or 0 (zero) if it does not exist ("" for string
	    fields).

       istats::remove [key]
	    Removes the custom field from all segments on all blades. Effectively resets a counter to 0.

UTILITIES
       The following commands are TCL utility commands.

       tmsh::clear_screen
	    Clears the screen and places the cursor at the upper left of the screen.

       tmsh::display [variable | command output]
	    Provides access to the tmsh pager. Output generated with the Tcl puts command is not paged.

       tmsh::display_threshold [integer]
	    When a script is run, the system disables the option cli preference display-threshold.

	    You can use the Tcl tmsh::display_threshold command to re-enable the threshold. Re-enabling the threshold
	    in this way causes the script to generate a prompt if you issue the tmsh::list, tmsh::show,
	    tmsh::get_config, or tmsh::get_status commands, and the output that is generated exceeds the threshold.
	    See help cli preference for a description of this option and valid ranges for its value.

       tmsh::expand_macro [macro_text] options...
	    Expands a macro and returns the resulting string. A macro is a string containing macro syntax which can
	    be used for parameter substitution, script and iRule templatization, etc. The Macro Syntax includes the
	    following delimiters:

	    <%		    The beginning of an expansion code block.

	    <%= 	    The beginning of an expansion code block. Spool the output after evaluating.

	    <%D[0-9][0-9]   The beginning of a debug/logging code block with the debug threshold set to 0 thru 99.

	    <%D[0-9][0-9]=  The beginning of a debug/logging code block with the debug threshold set to 0 thru 99.
	    Spool the output after evaluating.

	    %>		    The end of the current block (works for all types).

	    Typically, the result of the expand_macro command is used as the input to another command (eg. ltm rule
	    create). The command can be called multiple times within an iApp implementation to expand multiple
	    macros.

	    macro_text is the blob of text to expand. If not specified, the command will expand the Macro section of
	    the iApp. If no macro_text argument is specified and no Macro section exists for the iApp, an error will
	    be issued.

	    -vars name_value_pair_list

	    Specifies a list of additional variables (name/value pairs) which can be referenced within the macro and
	    expanded by the command. All APL variables are automatically available from within the macro, so the
	    -vars option allows a way to specify additional variables from the iApp Implementation section. Since the
	    variables are defined within a Tcl list the format is: { name1 value1 name2 ... nameN valueN }

	    -debug debug_levels

	    Specifies a single debug level or list of debug levels for controlling which debug messages get rendered
	    in the expanded output.

	    -debuginclusive debug_level

	    Specifies a debug level for controlling which debug messages get rendered in the expanded output. Since
	    it's "inclusive" all messages with a level at the specified level and below will get rendered in the
	    expanded output.

	    The following example expands the macro defined in the Macro section of the iApp, and sets the debug
	    level to render all debug messages with a level of 11, 33 or 66:

	    tmsh::expand_macro -debug {11 33 66}

	    The following example expands the macro defined via a Tcl variable (mac), adds two variables (foo and
	    enable_mything), and sets the debug level to render all messages of level 66 and below:

	    tmsh::expand_macro $mac -vars {foo bar enable_mything true} -debuginclusive 66

       tmsh::get_ifile_text [iFile name]
	    Retrieve the text contained in the specified text iFile. When used on an iFile containing characters
	    which are non-ascii or are not printable/space, an error will be returned.

       tmsh::include [script name]
	    Runs the Tcl eval command on the specified script. The system evaluates the script at a global level, and
	    all procedures in the included script are available to any other procedure. You must have previously
	    created the script that is being included using the tmsh edit / cli script [name] command. If a full path
	    is not given for the script name, tmsh will attempt to first locate the script from the same folder as
	    the including script, then the root partition folder of the including script, and finally the /Common
	    folder.

       tmsh::run_proc [script_name:proc_name] options...]
	    Runs the Tcl eval command on the specified script and process. The script script_name is loaded as if
	    tmsh::include was called. After the script is loaded, the Tcl eval command is run on the specified Tcl
	    process. Any options that were specified are passed to the Tcl process. This is essentially a short form
	    of running tmsh::include script_name, followed by running one of the Tcl processes contained in the
	    script that was included.

	    The following example invokes the display_pool_status proc that is contained in the pool_utils script:

	    tmsh::run_proc pool_utils:display_pool_status

       tmsh::stateless [disabled | enabled]
	    Modifies the behavior of tmsh::create and tmsh::delete.

	    When stateless mode is disabled, an attempt to create an object that already exists in the configuration
	    results in an error, and an attempt to delete an object that does not exist in the configuration is an
	    error.

	    When stateless mode is enabled, an attempt to create an object that already exists in the configuration
	    does not result in an error, and an attempt to delete an object that does not exist in the configuration
	    does not result in an error.

	    Enabling stateless mode enables scripts to successfully run multiple times with the same input.

	    The default value is disabled.

       tmsh::version
	    Returns the version number of the BIG-IP system as a Tcl string. The version consists of three digits: a
	    major, minor, and maintenance version, separated by periods. For example, 10.1.0 indicates minor version
	    1 of major version 10.

CONTEXT SENSITIVE HELP
       Use the following commands to create a script that provides context sensitive help when a user types Tab or
       question mark (?).

       script::help
	    Scripts can provide the script::help procedure. tmsh invokes the procedure when a user types a question
	    mark (?) while entering the command sequence run / cli script [name]. If the specified script includes
	    the script::init procedure, tmsh invokes it before the script::help procedure. The script can add context
	    sensitive help by calling the tmsh::add_help and tmsh::builtin_help procedures. tmsh formats the help and
	    displays it.

       script::tabc
	    Scripts can provide the script::tabc procedure. The system invokes this procedure when the user types Tab
	    while entering the command sequence run / cli script. If the script::init procedure is included in the
	    script, that procedure is invoked before the script::tabc procedure. The script can add tab completion
	    datasets to the script by calling the tmsh::add_tabc and tmsh::builtin_tabc procedures. tmsh either
	    formats and displays the tab completion datasets, or if possible, completes the current argument.

       tmsh::csh
	    tmsh::csh is a Tcl string variable that can be used in the script::init procedure to determine the
	    context in which the script::init procedure was invoked.

	    tmsh::csh is set to one of the following:

	    question mark (?)
		 Indicates that the user typed a question mark (?).

	    TABC Indicates the user pressed the Tab key.

	    an empty string ""
		 Indicates the script is being run.

       tmsh::add_help [ [category item description] | [description] ]
	    Displays context sensitive help when the user types a question mark (?). If you supply one argument, that
	    argument displays as-is with no formatting applied to the description.

	    If you supply three arguments, one or more datasets are constructed. The first argument is the name of
	    the dataset. The second argument is an item in the dataset. The third argument is a description of the
	    item. This command has an effect only if the Tcl tmsh::csh variable is set to question mark (?).

       tmsh::builtin_help ["tmsh command" args...]
	    Presents the same results as typing a question mark (?) while entering a tmsh command. The system stores
	    a set of possible completions and displays the possibilities when the script::help procedure returns.
	    This command has an effect only if the Tcl tmsh::csh variable is set to question mark (?).

       tmsh::add_tabc [ [category item] | [item] ]
	    Adds tab completion datasets. If you supply one argument, the system adds that argument to an anonymous
	    dataset. If you supply two arguments, the system constructs one or more datasets. The first argument is
	    the name of the dataset. The second argument is an item in the dataset. Potential completions are
	    displayed in groups based on category. This command has an effect only if the Tcl $tmsh::csh variable is
	    set to TABC.

       tmsh::builtin_tabc ["tmsh command" args...]
	    Many of the tmsh commands that are available for scripting are also available in the interactive shell. A
	    script can use the tmsh::builtin_tabc command to present the same tab completion results as a built-in
	    command. The command does not return a value. The set of possible completions are stored internally and
	    displayed when the script::tabc procedure returns. This command has an effect only if the Tcl $tmsh::csh
	    variable is set to TABC.

THIRD PARTY TCL LIBRARY USAGE
       A selection of third party libraries have been tested to work within the CLI script environment, including
       MD5, BASE64, SHA1/SHA256, HTTP, TLS, TCL Perl, LDAP client, and XML parser. The TCL packages can only reside
       in the directory of /usr/share/compat-tcl8.4.

       Important: Only these tested packages are supported currently.

       This example demonstrates the use of a Tcl package command to make use of tls/https. The TLS package is
       installed in the directory /usr/share/compat-tcl8.4/tls in the form of two files: tls.tcl and libtls1.6.1.so.

	 Modify script /Common/use_tls {

	 proc script::run {} {
	     set pkg_name tls
	     set pkg_version 1.6
	     package require http
	     if {[catch {package require $pkg_name pkg_version}]} {
		 puts "No package found: $pkg_name!\n"
	     } else {
		 puts "Found package: $pkg_name!\n"
		 http::register https 443 tls::socket
		 set token [http::geturl https://172.27.42.161/]
		 upvar #0 $token state
		 puts $state(http)
		 puts $state(body)
	     }
	   }
	 }

       This example uses the callback function to handle http data.

	 cli script /Common/use_http2 {
	 proc script::httpCallback {token} {
		 upvar #0 $token state
		 puts $state(http)
		 puts $state(body)
		 incr ::got_something
	 }
	 proc script::run {} {
	     namespace eval :: {
		 set got_something 0
	     }
	     set pkg_name http
	     set pkg_version 2.4.5
	     if {[catch {package require $pkg_name $pkg_version}]} {
		 puts "No package found: $pkg_name!\n"
	     } else {
		 puts "Found package: $pkg_name!\n"
		 http::geturl http://172.27.42.22/index.htm -command script::httpCallback
		 vwait ::got_something
	     }
	   }
	 }

       This example uses the LDAP client package to query data.

	 cli script /Common/use_ldap {
	 proc script::run {} {
	     set pkg_name ldap
	     if {[catch {package require $pkg_name 1.8}]} {
		 puts "No package found: $pkg_name!\n"
	     } else {
		 puts "Found package: $pkg_name!\n"
		 set handle [ldap::connect 172.27.1.2]
		 ldap::bind $handle
		 set results [ldap::search $handle "dc=f5,dc=com" "(uid=test)" {}]
		 foreach result $results {
		     puts $result
		 }
		 ldap::unbind $handle
		 ldap::disconnect $handle
	     }
	   }
	 }

       Here are some additional examples:

	 cli script /Common/use_parray {
	 proc script::run {} {
		 puts [info patch]
		 namespace eval :: {
		     set pkg_location /usr/share/compat-tcl8.4/
		     source [file join $pkg_location package.tcl]
		 }
		 puts "NS: [namespace current]"
		 set pkg_location $::pkg_location
		 source [file join $pkg_location parray.tcl]
		 parray ::tcl_platform
	   }
	 }

	 cli script /Common/use_sha2 {
	 proc script::run {} {
		 set pkg_name sha256
		 if {[catch {package require $pkg_name}]} {
		     puts "No package found: $pkg_name!\n"
		 } else {
		     puts "Found package: $pkg_name!\n"
		     puts "TCL does SHA2 now:"
		     puts [sha2::sha256 "TCL does SHA2"]
		 }
	   }
	 }

	 cli script /Common/use_tclperl {
	 proc script::run {} {
		 set pkg_name tclperl
		 if {[catch {package require $pkg_name}]} {
		     puts "No package found: $pkg_name!\n"
		 } else {
		     puts "Found package: $pkg_name!\n"
		     set interpreter [perl::interp new]
		     $interpreter eval {print "Hello World\n"}
		     perl::interp delete $interpreter
		}
	   }
	 }

SPECIAL CHARACTERS
       There are several characters that are part of both Tcl and tmsh syntax. You must escape these characters in a
       shell script so that Tcl passes them to tmsh. You can use standard Tcl escape characters, such as quotes and
       back slashes. You must escape curly braces ({ }), for example, "{" "}".

       tmsh::create ltm pool my_pool members add "{ 10.1.2.3:80 }"
	    Creates a Local Traffic Manager pool named my_pool.

DISABLED COMMANDS
       The following commands are disabled for users that have not been assigned a user role of Administrator or
       Resource Administrator:

       ·    auto_execok

       ·    auto_import

       ·    auto_load

       ·    auto_mkindex

       ·    auto_mkindex_old

       ·    auto_qualify

       ·    auto_reset

       ·    bgerror

       ·    cd

       ·    close

       ·    eof

       ·    exec

       ·    fblocked

       ·    fconfigure

       ·    fcopy

       ·    file

       ·    filevent

       ·    filename

       ·    flush

       ·    glob

       ·    http

       ·    interp

       ·    load

       ·    memory

       ·    open

       ·    package

       ·    pid

       ·    pkg:create

       ·    pkg_mkindex

       ·    pwd

       ·    seek

       ·    socket

       ·    source

       ·    tcl_findLibrary

       ·    tell

       ·    unknown

       ·    updates

       ·    vwait

EXAMPLES
       The following example demonstrates the use of all tmsh Tcl commands. The script displays all configuration
       property values or all status and statistic values for the specified component, depending on the specified
       arguments. The system displays all configuration settings if you replace [tmsh::get_config $comp
       all-properties] with [tmsh::get_config / all-properties]. The use of the all-properties option ensures that
       all options are displayed.

       This command sequence is an example of how to run the following script: run / cli script example.tcl config
       ltm pool.

	 cli script example.tcl {

	     proc script::init { } {
		 set ::field_fmt "%-25s %s"
		 set ::usage_string "usage: [lindex $tmsh::argv 0] \
		      "
	     }

	     proc script::help { } {
		 if { $tmsh::argc < 2 } {
		     tmsh::add_help Options: config "Display configuration"
		     tmsh::add_help Options: status \
					 "Display status and statistics"
		 }
		 else {
		     build_csh tmsh::builtin_help
		 }
	     }

	     proc script::tabc { } {
		 if { $tmsh::argc < 2 } {
		     tmsh::add_tabc config
		     tmsh::add_tabc status
		 }
		 else {
		     build_csh tmsh::builtin_tabc
		 }
	     }

	     proc script::run { } {
		 if { $tmsh::argc < 3 } {
		     usage
		 }
		 set opt [lindex $tmsh::argv 1]
		 if { $opt != "config" && $opt != "status" } {
		     usage
		 }
		 set comp ""
		 for {set idx 2} {$idx < $tmsh::argc} {incr idx} {
		     append comp "[lindex $tmsh::argv $idx] "
		 }

		 if { $opt == "config" } {
		     set objs [tmsh::get_config $comp all-properties]
		 }
		 else {
		     set objs [tmsh::get_status $comp]
		 }

		 set idx 0
		 set total [llength $objs]

		 while { $idx < $total } {
		     set obj [lindex $objs $idx]
		     print_object obj
		     puts ""
		     incr idx;
		 }
	     }

	     proc print_fields { objVar } {
		 upvar $objVar obj
		 set fdx 0
		 set fields [tmsh::get_field_names value $obj]
		 set field_count [llength $fields]
		 while { $fdx < $field_count } {
		     set field [lindex $fields $fdx]
		     puts [format $::field_fmt $field \
			 [tmsh::get_field_value $obj $field]]
		     incr fdx
		 }
	     }

	     proc print_object { objVar } {
		 upvar $objVar obj
		 puts "[tmsh::get_type $obj] [tmsh::get_name $obj]"

		 # name/value pairs
		 print_fields obj

		 # nested objects
		 set fdx 0
		 set fields [tmsh::get_field_names nested $obj]
		 set count [llength $fields]
		 while { $fdx < $count } {
		     set field [lindex $fields $fdx]
		     set nested_objects [tmsh::get_field_value $obj $field]
		     set ndx 0
		     set n_count [llength $nested_objects]
		     while { $ndx < $n_count } {
			 set nobj [lindex $nested_objects $ndx]
			 print_object nobj
			 incr ndx
		     }
		     if {$n_count == 0 } {
			 puts [format $::field_fmt $field "none"]
		     }
		     incr fdx
		 }
	     }

	     proc build_csh { command } {
		 # generate context sensitive help, tab completion or "?"
		 set args ""
		 for {set idx 2} {$idx < $tmsh::argc} {incr idx} {
		     lappend args [lindex $tmsh::argv $idx]
		 }
		 set opt [lindex $tmsh::argv 1]
		 if { $opt == "config" } {
		     $command list $args
		 }
		 elseif { $opt == "status" } {
		     $command show $args
		 }
		 else {
		     puts "\nunexpected argument: $opt"
		 }
		 return $args
	     }

	     proc usage { } {
		 puts $::usage_string
		 exit
	     }
	 }

EXAMPLES
       The following example demonstrates the scripts using 11.6.0 tmsh syntax.

	cli script example_ver.tcl {
	   ...
	   proc script::run {} {
	       tmsh::modify cli version active 11.6.0
	       # the tmsh command in the section below should contain 11.6.0 tmsh syntax
	       puts stdout [tmsh::list ltm pool mypool]
	       ...
	  }
	}

       The following example demonstrates the scripts that are using multiple tmsh syntaxes.

	cli script example_multi_ver.tcl {
	   ....
	   proc script::run {} {
	       tmsh::modify cli version active 11.5.0
	       # the tmsh command in the section below should contain 11.5.0 tmsh syntax
	       puts stdout [tmsh::list ltm pool mypool]
	       ...

	       tmsh::modify cli version active 11.6.0
	       # the tmsh command in the section below should contain 11.6.0 tmsh syntax
	       puts stdout [tmsh::list ltm pool mypool]
	       ...
	  }
	}

SEE ALSO
       cli alias, create, delete, edit, glob, list, modify, regex, reset-stats, show, tmsh and generate.

       For complete information about tmsh, see the Traffic Management Shell (tmsh) Reference Guide. This guide is
       available on the Ask F5(sm) Knowledge Base (www.askf5.com).

       For information about Tcl, see www.tcl.tk.

COPYRIGHT
       No part of this program may be reproduced or transmitted in any form or by any means, electronic or
       mechanical, including photocopying, recording, or information storage and retrieval systems, for any purpose
       other than the purchaser's personal use, without the express written permission of F5 Networks, Inc.

       F5 Networks and BIG-IP (c) Copyright 2009-2016. All rights reserved.

BIG-IP						      2016-03-14					cli script(1)