Forum Discussion

dvalve_376192's avatar
dvalve_376192
Icon for Nimbostratus rankNimbostratus
Nov 05, 2018

python show running-config

I am trying to get a Python script to output the running config of my F5, to show everything from authentication to pools to ntp settings. With TMSH/SSH it's so easy doing 'show running-config' and then saving that output. Is there anything similar to this that I can do with the Python F5-SDK? I am trying to generate this in a cleaner fashion than 'show running-config' does it as I use this for PCI compliance evidence. Any help would be appreciated. To muddy the waters a bit I am EXTREMELY new to F5 products.

 

  • I was able to get the running config to show with Python, please see the code below:

     

    from f5.bigip import ManagementRoot
    mgmt = ManagementRoot("your_f5_ip", 'username', 'password')
    x = mgmt.tm.util.bash.exec_cmd('run', utilCmdArgs='-c "tmsh show running-config"')
    print(x.commandResult)
  • tmsh show running-config
    is currently not supported in the iControl REST framework. You can call the
    /mgmt/tm/util/bash
    endpoint as a workaround. A curl example is shown below:

    curl -sku : https:///mgmt/tm/util/bash -X POST \
      -d '{"command":"run", "utilCmdArgs":"-c \"tmsh show running-config\""}'
    

    The output from the tmsh command is shown in the

    commandResult
    field. All the lines are concatenated by translating LF (0x0A) to literal \n. In bash, you may pipe the output to something like this:

    | python -m json.tool | grep commandResult | sed 's/\\n/\n/g'
    

    Of course, you can do better using Python.

    See also Native tmsh/bash commands via REST API.

  • I was able to get the running config to show with Python, please see the code below:

     

    from f5.bigip import ManagementRoot
    mgmt = ManagementRoot("your_f5_ip", 'username', 'password')
    x = mgmt.tm.util.bash.exec_cmd('run', utilCmdArgs='-c "tmsh show running-config"')
    print(x.commandResult)
    • omkar1's avatar
      omkar1
      Icon for Nimbostratus rankNimbostratus

      hey mike did you ever get a chance to modify data in a cleaner fashion.

       

      I am trying to do the same thing as you are

      • ngcarabajal's avatar
        ngcarabajal
        Icon for Nimbostratus rankNimbostratus

        It worked well for me. What do you mean to "modify the data".

  • It aint pretty , but it should do the trick, one possible improvment would be implementing list with all commands you need and for loop

        import paramiko,time
    
    device_1 = '172.16.1.53'
    devices = [device_1]
    username = 'cisco'
    password = 'cisco'
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    
    for device in devices:
        ssh.connect(device, username=username, password=password,allow_agent=False,look_for_keys=False)
        file_template = 'output.{}.txt'.format(device)
        with open(file_template, 'wb') as file_handler:
            channel = ssh.invoke_shell()
            channel.send('term length 0\n')
            time.sleep(2)
            out = channel.recv(9999)
            channel.send('show running-config\n')
            time.sleep(15)
            out = channel.recv(9999)
            file_handler.write(out)
            file_handler.close()
        ssh.close()