Scripts
-------

It is possible to create and  execute SSH scripts
on devices from within the system. Scripts can be
executed as part of a provisioning workflow.

Script files syntax is the Expect script syntax with the 
ability to add one of the following per line of the script:

* send data to a device and evaluate and substitute macros visible in the
  context hierarchy
* define a regular expression for the response expected from the device
* branch to a next line based on a match to a response from a device
* comments can be added to the script

Scripting has been tested with Cisco IOS devices.

Please note:

* Branching is only for one line in the script file and does not yet support
  blocks of commands.
* Security: There is no control of what can be done or not done on the device.

In order to create and run a script, a supporting data model and IOS script device model 
Configuration Template can be used as a part of a Provisioning Workflow that is executed.

A GUI Rule called ``ConfigurationTemplateOverride`` for ``device/ios/Script`` is applied 
by default to the Configuration Template, which adds a ``multiline`` property to 
the ``expect_script`` field of the device model. This enables multiline input of 
the script.

The supporting model for the IOS device is ``data/Ios``, to which an instance is added 
containing the host, port and authentication details of the device. This instance can 
then be selected as the Network Device Filter in the Provisioning Workflow if required.
Alternatively, the Provisioning Workflow can define a context variable, say ``ios_details``,
that resolves to a particular ``data\Ios`` instance, 
for example ``{{data.Ios.* || direction:local}}``

In the IOS device model Configuration Template, the script itself is entered and can consist 
of a combination of Expect script syntax and system macros that are for example used 
for standard script blocks or variables for the selected ``data/IOS`` instance values. 

When the Provisioning Workflow is executed, the transaction log can be inspected to
examine the entire script with macros and variables referenced, as well as 
the device response.


.. |VOSS Automate| replace:: VOSS Automate
.. |Unified CM| replace:: Unified CM
