netmiko_send_command_ps
Send command string to device using promptless (ps) approach. Can be used for any command, including commands that change device prompt. Multiple commands can be sent separated by ‘ ‘ newline.
Promptless mode allows to detect end of output from device without relying on timers or correct prompt matching (hence the name - promptless). This mode still uses pattern to decide if device finished emitting data, but that pattern is not dependent on device’s prompt regex matching.
Each reading cycle, data from device read as fast as possible until device either finishes or pose to prepare more data. Latter case detected and handled using read timeout timer and checking if new data received. To detect when device finishes producing output, algorithm sends two space character to device and checks in next read cycle if last line contains two additional spaces, concluding that end of output detected if so and continue cycling otherwise.
Overall its similar to how Humans interact with device prompt to verify that its still operational - try hitting space or type something in terminal to see if its appears on the screen.
Dependencies:
nornir-netmiko module required
netmiko_send_command_ps sample usage
Code to invoke netmiko_send_command_ps
task:
from nornir import InitNornir
from nornir_salt.plugins.tasks import netmiko_send_command_ps
nr = InitNornir(config_file="config.yaml")
commands = '''
show ip int brief
conf t
interface loopback 100
ip address 1.1.1.100 255.255.255.255
end
show ip int brief
write
'''
output = nr.run(
task=netmiko_send_command_ps,
commands="show run",
netmiko_kwargs={}
)
output_multiline = nr.run(
task=netmiko_send_command_ps,
commands=commands,
netmiko_kwargs={}
)
netmiko_send_command_ps returns
Returns Nornir results object with individual tasks names set equal to commands sent to device.
netmiko_send_command_ps reference
- nornir_salt.plugins.tasks.netmiko_send_command_ps.netmiko_send_command_ps(task: nornir.core.task.Task, command_string: str, enable: bool = False, **kwargs: Any) nornir.core.task.Result
Patch netmiko connection object with send_command_ps method and execute it.
- Parameters
command_string – (str) Command to execute on the remote network device.
enable – (bool) Set to True to force Netmiko .enable() call.
kwargs – (dict) Additional arguments to pass to send_command_ps method.
- Return result object
with result of the show command
- nornir_salt.plugins.tasks.netmiko_send_command_ps.send_command_ps(self, command_string: str, read_timeout: int = 30, timeout: int = 120, inter_loop_sleep: float = 0.1, initial_sleep: float = 0.1, strip_prompt: bool = True, strip_command: bool = True, normalize: bool = True, cutoff: float = 0.6, nowait: bool = False)
Execute command_string_ps on the SSH channel using promptless (ps) approach. Can be used for any commands, including commands that change prompt. Multiple commands can be sent separated by ‘n’ newline.
- Parameters
command_string – (str) The command(s) to be executed on the remote device.
read_timeout – (int) Timeout in seconds to wait for data from devices, default 30s, if set to -1 will wait indefinitely
timeout – (int) Absolute timeout in seconds of overall wait, default 120s, if set to -1 will wait indefinitely
inter_loop_sleep – (int) Interval in seconds to sleep between reading loops, default 0.1s
initial_sleep – (int) time to sleep after sending command, default 0.1s
strip_prompt – (bool) Remove the trailing router prompt from the output (default: True).
strip_command – (bool) Remove the echo of the command from the output (default: True).
normalize – (bool) Ensure the proper enter is sent at end of command (default: True).
cutoff – (int) used as difflib get_close_matches cutoff argument to check if last line looks similar to any previously seen prompts, default is 0.6
nowait – (bool) Default is False, if True sends command and returns immediately without waiting for prompt right after
initial_sleep
timer elapsed.