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()

浙公网安备 33010602011771号