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