用于更新F5中数据组的Python脚本

2024-05-15 21:16:55 发布

您现在位置:Python中文网/ 问答频道 /正文


我正在尝试更新F5中的数据组
我正在尝试使用从F5 devcentral获取的代码:

#!/usr/bin/python
#
# Chen Gateway Protocol
#
# Example of using iControl REST
# From: https://devcentral.f5.com/s/articles/routing-http-by-request-headers
#
# Requires iControl REST > 11.5.0
#
# The following script allows one to dynamically update a data-group via
# iControl REST
#
import requests
import json

BIGIP_ADDRESS = '10.10.10.10'
BIGIP_USER = 'apiuser'
BIGIP_PASS = 'apipass'
DATA_GROUP = '~Common~foo'


class CGP(object):
    def __init__(self, host, user, passwd):
        self.host = host
        self.user = user
        self.passwd = passwd
        self.mgmt_url = "https://%s/mgmt/tm" % (host)

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

    def get_data_group(self, datagroup):
        req_url = "%s/ltm/data-group/internal/%s" % (self.mgmt_url, datagroup)
        req = self.session.get(req_url)
        return dict([(a['name'], a['data']) for a in req.json()['records']])
        "return contents of data-group as dictionary"

    def set_data_group(self, datagroup, data):
        req_url = "%s/ltm/data-group/internal/%s" % (self.mgmt_url, datagroup)
        records = {'records': [{'data': r[1], 'name': r[0]} for r in data.items()]}
        req = self.session.put(req_url, data=json.dumps(records))
        "update contents of data-group as dictionary"


if __name__ == "__main__":
    import argparse
    import sys

    parser = argparse.ArgumentParser()
    parser.add_argument('action')
    parser.add_argument('host_header')
    parser.add_argument('node_ip_port', nargs='?')
    args = parser.parse_args()

    cgp = CGP(BIGIP_ADDRESS, BIGIP_USER, BIGIP_PASS)
    data = cgp.get_data_group(DATA_GROUP)
    if args.action == 'del':
        if args.host_header in data:
            del data[args.host_header]
            print
            "deleted:", args.host_header
        else:
            print
            "error: %s does not exist" % (args.host_header)
            sys.exit(1)
    elif args.action == 'add':
        if args.host_header in data:
            print
            "error: %s already exists" % (args.host_header)
            sys.exit(1)
        else:
            data[args.host_header] = args.node_ip_port
            print
            "added: %s" % (args.host_header)
    elif args.action == 'update':
        if args.host_header in data:
            data[args.host_header] = args.node_ip_port
            print
            "updated:", args.host_header
        else:
            print
            "error: %s does not exist" % (args.host_header)
            sys.exit(1)
    elif args.action == 'get':
        print("%s: %s" % (args.host_header, data.get(args.host_header, "DOES NOT EXIST")))
    cgp.set_data_group(DATA_GROUP, data)


我不想使用如下命令行运行文件:“/脚本.py获取“
我想写另一个python文件脚本.py并传递动作和论点。
如何从另一个python文件执行该操作?

谢谢,
诺姆。你知道吗


Tags: inselfhostparserurldatagetif