Search code examples
pythonprogress-barscpnetmiko

Netmiko SecureCopy Progressbar


I am trying to improve my code and add the progressbar to the file_transfer function. I was wondering how can I calculate the sent argument? I found this answer here and this on GitHub, but I can't figure out how to use it with my provided code.

from os.path import getsize

from netmiko import ConnectHandler, file_transfer, progress_bar

router = {
    "device_type": "cisco_ios",
    "host": "sandbox-iosxe-latest-1.cisco.com",
    "username": "developer",
    "password": "C1sco12345",
    "port": 22,
    "verbose": True,
    "conn_timeout": 12,
    "fast_cli": False,
    "session_log": "sandbox-iosxe-latest-1.cisco.com.log",
}

src_file = dest_file = input("Name of file to copy: ")

with ConnectHandler(**router) as net_connect:
    scp = net_connect.send_config_set(config_commands=["ip scp server enable"])
    transfer = file_transfer(
        net_connect,
        source_file=src_file,
        dest_file=dest_file,
        file_system="flash:",
        direction="put",
        overwrite_file=True,
        socket_timeout=100.0,
        progress=progress_bar(
            filename=src_file,
            size=getsize(src_file),
            sent=sent,  # How to calculate? What should be placed here?
        ),
    )

Solution

  • Should just be progress=progress_bar or progress4=progress_bar. You just provide a callable that is constructed a certain way (and you are using the progress_bar function that Netmiko provides so that should be fine).

    Here is an example file_transfer using it:

    ssh_conn = ConnectHandler(**cisco)
    transfer_dict = file_transfer(
        ssh_conn,
        source_file=source_file,
        dest_file=dest_file,
        file_system=file_system,
        direction=direction,
        # Force an overwrite of the file if it already exists
        overwrite_file=True,
        progress4=progress_bar,
    )