F5_restful

2020年的代码,留个纪念

# _*_ coding: utf-8 _*_
# Python Version: 3.6

import requests
import getpass
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


def rest(user, passwd):
    rest_handler = requests.session()
    rest_handler.auth = (user, passwd)
    rest_handler.verify = False
    rest_handler.headers.update({'Content-Type': 'application/json'})
    return rest_handler


def main():
    Base_uri = '/mgmt/tm/'
    device_ip_list = ['10.1.1.4', '192.168.214.1', '10.1.10.244', '10.1.10.245']
    httpd_uri = '%s%s' % (Base_uri, 'sys/httpd')
    config_uri = '%s%s' % (Base_uri, 'sys/config')
    synchronize_uri = '%s%s' % (Base_uri, 'cm')
    get_a_b_uri = '%s%s' % (Base_uri, 'cm/sync-status')
    hostname_uri = '%s%s' % (Base_uri, 'sys/global-settings')

    #user = input('please input username:')
    #passwd = getpass.getpass('please input password:')
    #passwd = input('please input password:')

    for ip in device_ip_list:
        handler = rest('admin', 'admin')
        # Patch the httpd configuration
        device_httpd_uri = 'https://%s%s' % (ip, httpd_uri)
        device_get_a_b_uri = 'https://%s%s' % (ip, get_a_b_uri)
        device_hostname_uri = 'https://%s%s' % (ip, hostname_uri)

        device_get_a_b_uri_list = handler.get(device_get_a_b_uri).json()
        device_hostname_uri_list = handler.get(device_hostname_uri).json()
        device_name = device_hostname_uri_list['hostname']
        print(device_get_a_b_uri_list['entries']['https://localhost/mgmt/tm/cm/sync-status/0']['nestedStats']['entries'])
        status = device_get_a_b_uri_list['entries']['https://localhost/mgmt/tm/cm/sync-status/0']['nestedStats']['entries']['mode']['description']
        flag = input(ip + '的主机名为[' + device_name + '],当前设备状态为:' + status + ',推送指令请按1,跳过请按0:')
        if status == 'Standby':
            print('Standby设备禁止推送指令')
        elif flag == '1':
            # httpd_payload 要推送的内容
            httpd_payload = "{\"include\":\"\\n <LocationMatch \\\\\\\";\\\\\\\">\\n Redirect 404 /\\n </LocationMatch>\\n <LocationMatch \\\\\\\"hsqldb\\\\\\\">\\n Redirect 404 /\\n </LocationMatch>\\n \"}"
            httpd_conf = handler.patch(device_httpd_uri, data=httpd_payload).json()
            result = httpd_conf['include']
            if result == '\n <LocationMatch \\";\\">\n Redirect 404 /\n </LocationMatch>\n <LocationMatch \\"hsqldb\\">\n Redirect 404 /\n </LocationMatch>\n ':
                flag = input('%s push success!' % ip + ',是否执行同步指令,推送指令请按1,跳过请按0:')
                if status != 'Active' and flag =='1':
                    print('非Active设备禁止同步')
                elif flag == '1':
                    # Save the system config
                    device_config_uri = 'https://%s%s' % (ip, config_uri)
                    save_payload = "{\"command\":\"save\"}"
                    save_push = handler.post(device_config_uri, data=save_payload).json()
                    # synchronize changes with the peers
                    ## get device_group name
                    device_group_uri = 'https://%s%s/device-group' % (ip, synchronize_uri)
                    device_group_name_list = handler.get(device_group_uri).json()['items']
                    device_group_name_list = [x['name'] for x in device_group_name_list]
                    target_group_name = ''
                    for dg in device_group_name_list:
                        if dg != 'gtm' and dg != 'device_trust_group':
                            target_group_name = dg
                    ## push synchronize
                    if target_group_name != '':
                        sync_config_uri = 'https://%s%s' % (ip, synchronize_uri)
                        sync_payload = "{\"command\":\"run\",\"utilCmdArgs\":\"config-sync to-group %s\"}" % target_group_name
                        save_push = handler.post(sync_config_uri, data=sync_payload).json()
                        print('同步完毕')
                    else:
                        print('%s没找到同步组' % ip)


if __name__ == '__main__':
    main()
posted @ 2026-04-21 17:30  WiseHYH  阅读(12)  评论(0)    收藏  举报