For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

MaxMedov's avatar
MaxMedov
Icon for Cirrostratus rankCirrostratus
Sep 18, 2022
Solved

Python script to save /sys config file

Hi guys, I need help writing a dedicated script to do those things:

# tmsh save /sys config file bigip.conf no-passphrase

# netstat -nr > netroute.txt

Both of the files need to be sent to another server directory combining the device name + current date

Can anyone help, please? Thank you!

 

  • Hi MaxMedov, this works local for me, but you might need to flesh out a little functionality to meet your needs. I used bigrest for this sample:

    from bigrest.bigip import BIGIP
    from datetime import datetime
    
    datestring = datetime.now().strftime('%Y-%m-%d')
    hostname = 'ltm3.test.local'
    
    br = BIGIP(hostname, 'admin', 'admin', request_token=True)
    
    # Save Config
    data = {'command': 'save'}
    task = br.task_start("/mgmt/tm/task/sys/config", data)
    print(f'Task {task.properties["_taskId"]} created at {datetime.now().strftime("%H:%M:%S")}')
    br.task_wait(task)
    if br.task_completed(task):
        br.task_result(task)
        print(f'Task {task.properties["_taskId"]} completed at {datetime.now().strftime("%H:%M:%S")}')
    else:
        raise Exception()
    
    # Copy config to /shared/images/
    data = {'command': 'run', 'utilCmdArgs': f'-c "cp /config/bigip.conf /shared/images/{datestring}-{hostname}-bigip.conf"'}
    br.command('/mgmt/tm/util/bash', data)
    
    # Save netstat -rn data to /shared/images/
    data = {'command': 'run', 'utilCmdArgs': f'-c "netstat -rn > /shared/images/{datestring}-{hostname}-netroute.txt"'}
    br.command('/mgmt/tm/util/bash', data)
    
    # Download files
    br.download('/mgmt/cm/autodeploy/software-image-downloads/', f'{datestring}-{hostname}-netroute.txt')
    br.download('/mgmt/cm/autodeploy/software-image-downloads/', f'{datestring}-{hostname}-bigip.conf')
    
    # Remove files from /shared/images/
    data = {'command': 'run', 'utilCmdArgs': f'/shared/images/{datestring}-{hostname}-netroute.txt'}
    br.command('/mgmt/tm/util/unix-rm', data)
    data = {'command': 'run', 'utilCmdArgs': f'/shared/images/{datestring}-{hostname}-bigip.conf'}
    br.command('/mgmt/tm/util/unix-rm', data)

      And after running, I have both files downloaded for me in my local directory:

    jrahm@mac scripts % ls -als | grep 2022-09-20
       968 -rw-r--r--    1 rahm  1437522721     495338 Sep 20 01:47 2022-09-20-ltm3.test.local-bigip.conf
         8 -rw-r--r--    1 rahm  1437522721        803 Sep 20 01:47 2022-09-20-ltm3.test.local-netroute.txt

10 Replies

  • Hi MaxMedov, this works local for me, but you might need to flesh out a little functionality to meet your needs. I used bigrest for this sample:

    from bigrest.bigip import BIGIP
    from datetime import datetime
    
    datestring = datetime.now().strftime('%Y-%m-%d')
    hostname = 'ltm3.test.local'
    
    br = BIGIP(hostname, 'admin', 'admin', request_token=True)
    
    # Save Config
    data = {'command': 'save'}
    task = br.task_start("/mgmt/tm/task/sys/config", data)
    print(f'Task {task.properties["_taskId"]} created at {datetime.now().strftime("%H:%M:%S")}')
    br.task_wait(task)
    if br.task_completed(task):
        br.task_result(task)
        print(f'Task {task.properties["_taskId"]} completed at {datetime.now().strftime("%H:%M:%S")}')
    else:
        raise Exception()
    
    # Copy config to /shared/images/
    data = {'command': 'run', 'utilCmdArgs': f'-c "cp /config/bigip.conf /shared/images/{datestring}-{hostname}-bigip.conf"'}
    br.command('/mgmt/tm/util/bash', data)
    
    # Save netstat -rn data to /shared/images/
    data = {'command': 'run', 'utilCmdArgs': f'-c "netstat -rn > /shared/images/{datestring}-{hostname}-netroute.txt"'}
    br.command('/mgmt/tm/util/bash', data)
    
    # Download files
    br.download('/mgmt/cm/autodeploy/software-image-downloads/', f'{datestring}-{hostname}-netroute.txt')
    br.download('/mgmt/cm/autodeploy/software-image-downloads/', f'{datestring}-{hostname}-bigip.conf')
    
    # Remove files from /shared/images/
    data = {'command': 'run', 'utilCmdArgs': f'/shared/images/{datestring}-{hostname}-netroute.txt'}
    br.command('/mgmt/tm/util/unix-rm', data)
    data = {'command': 'run', 'utilCmdArgs': f'/shared/images/{datestring}-{hostname}-bigip.conf'}
    br.command('/mgmt/tm/util/unix-rm', data)

      And after running, I have both files downloaded for me in my local directory:

    jrahm@mac scripts % ls -als | grep 2022-09-20
       968 -rw-r--r--    1 rahm  1437522721     495338 Sep 20 01:47 2022-09-20-ltm3.test.local-bigip.conf
         8 -rw-r--r--    1 rahm  1437522721        803 Sep 20 01:47 2022-09-20-ltm3.test.local-netroute.txt
    • MaxMedov's avatar
      MaxMedov
      Icon for Cirrostratus rankCirrostratus

      Thank you very much! I'll try it and update 🙂

  • Hi JRahm, I modified the script, and this is working well, thank you!
    One question, please, how do I add "no-passphrase" to the command generation of the conf file?
    Thank you again

    • JRahm's avatar
      JRahm
      Icon for Admin rankAdmin

      Options can be added to the URL of the method, so in the case of creating a specific file of the config, I think it's just:

       

      /mgmt/tm/task/sys/config?options=no-passphrase