X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FLoadBalancerUtil.py;h=340afe50a37768ed8a80f39bf1c98f5d68643b11;hp=77f641297339e6d0ff0206d0967b3242e0bd035a;hb=HEAD;hpb=06e6da52159a865a3fd366d9aad09c31159f9e4b diff --git a/resources/libraries/python/LoadBalancerUtil.py b/resources/libraries/python/LoadBalancerUtil.py index 77f6412973..471bc87e80 100644 --- a/resources/libraries/python/LoadBalancerUtil.py +++ b/resources/libraries/python/LoadBalancerUtil.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Intel and/or its affiliates. +# Copyright (c) 2023 Intel and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -13,12 +13,14 @@ """Loadbalancer util library.""" -from socket import htonl from ipaddress import ip_address +from socket import htonl + from resources.libraries.python.topology import NodeType, Topology from resources.libraries.python.PapiExecutor import PapiSocketExecutor -class LoadBalancerUtil(object): + +class LoadBalancerUtil: """Basic Loadbalancer parameter configuration.""" @staticmethod @@ -43,28 +45,33 @@ class LoadBalancerUtil(object): :returns: Nothing. :raises ValueError: If the node has an unknown node type. """ - if node['type'] == NodeType.DUT: - ip4_src_addr = ip_address(unicode(kwargs.pop('ip4_src_addr', - '255.255.255.255'))) - ip6_src_addr = ip_address(unicode(kwargs.pop('ip6_src_addr',\ - 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'))) - flow_timeout = kwargs.pop('flow_timeout', 40) - sticky_buckets_per_core = kwargs.pop('buckets_per_core', 1024) - - cmd = 'lb_conf' - err_msg = 'Failed to set lb conf on host {host}'.format( - host=node['host']) - - args = dict(ip4_src_address=str(ip4_src_addr), - ip6_src_address=str(ip6_src_addr), - sticky_buckets_per_core=sticky_buckets_per_core, - flow_timeout=flow_timeout) + if node[u"type"] == NodeType.DUT: + ip4_src_addr = ip_address( + kwargs.pop(u"ip4_src_addr", u"255.255.255.255") + ) + ip6_src_addr = ip_address( + kwargs.pop( + u"ip6_src_addr", u"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + ) + ) + flow_timeout = kwargs.pop(u"flow_timeout", 40) + sticky_buckets_per_core = kwargs.pop(u"buckets_per_core", 1024) + + cmd = u"lb_conf" + err_msg = f"Failed to set lb conf on host {node[u'host']}" + args = dict( + ip4_src_address=str(ip4_src_addr), + ip6_src_address=str(ip6_src_addr), + sticky_buckets_per_core=sticky_buckets_per_core, + flow_timeout=flow_timeout + ) with PapiSocketExecutor(node) as papi_exec: papi_exec.add(cmd, **args).get_reply(err_msg) else: - raise ValueError('Node {host} has unknown NodeType: "{type}"' - .format(host=node['host'], type=node['type'])) + raise ValueError( + f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'" + ) @staticmethod def vpp_lb_add_del_vip(node, **kwargs): @@ -77,13 +84,13 @@ class LoadBalancerUtil(object): protocol: tcp or udp. (int) port: destination port. (int) encap: encap is ip4 GRE(0) or ip6 (1GRE) or L3DSR(2) or NAT4(3) or - NAT6(4). (int) + NAT6(4). (int) dscp: dscp bit corresponding to VIP type: service type target_port: Pod's port corresponding to specific service node_port: Node's port new_len: Size of the new connections flow table used - for this VIP + for this VIP is_del: 1 if the VIP should be removed otherwise 0. :type node: dict @@ -91,40 +98,46 @@ class LoadBalancerUtil(object): :returns: Nothing. :raises ValueError: If the node has an unknown node type. """ - if node['type'] == NodeType.DUT: - vip_addr = kwargs.pop('vip_addr', '0.0.0.0') - protocol = kwargs.pop('protocol', 255) - port = kwargs.pop('port', 0) - encap = kwargs.pop('encap', 0) - dscp = kwargs.pop('dscp', 0) - srv_type = kwargs.pop('srv_type', 0) - target_port = kwargs.pop('target_port', 0) - node_port = kwargs.pop('node_port', 0) - new_len = kwargs.pop('new_len', 1024) - is_del = kwargs.pop('is_del', 0) - - cmd = 'lb_add_del_vip' - err_msg = 'Failed to add vip on host {host}'.format( - host=node['host']) - - vip_addr = ip_address(unicode(vip_addr)).packed - args = dict(pfx={'len': 128, - 'address': {'un': {'ip4': vip_addr}, 'af': 0}}, - protocol=protocol, - port=port, - encap=htonl(encap), - dscp=dscp, - type=srv_type, - target_port=target_port, - node_port=node_port, - new_flows_table_length=int(new_len), - is_del=is_del) + if node[u"type"] == NodeType.DUT: + vip_addr = kwargs.pop(u"vip_addr", "0.0.0.0") + protocol = kwargs.pop(u"protocol", 255) + port = kwargs.pop(u"port", 0) + encap = kwargs.pop(u"encap", 0) + dscp = kwargs.pop(u"dscp", 0) + srv_type = kwargs.pop(u"srv_type", 0) + target_port = kwargs.pop(u"target_port", 0) + node_port = kwargs.pop(u"node_port", 0) + new_len = kwargs.pop(u"new_len", 1024) + src_ip_sticky = kwargs.pop(u"src_ip_sticky", 0) + is_del = kwargs.pop(u"is_del", 0) + + cmd = u"lb_add_del_vip_v2" + err_msg = f"Failed to add vip on host {node[u'host']}" + + vip_addr = ip_address(vip_addr).packed + args = dict( + pfx={ + u"len": 128, + u"address": {u"un": {u"ip4": vip_addr}, u"af": 0} + }, + protocol=protocol, + port=port, + encap=htonl(encap), + dscp=dscp, + type=srv_type, + target_port=target_port, + node_port=node_port, + new_flows_table_length=int(new_len), + src_ip_sticky=src_ip_sticky, + is_del=is_del, + ) with PapiSocketExecutor(node) as papi_exec: papi_exec.add(cmd, **args).get_reply(err_msg) else: - raise ValueError('Node {host} has unknown NodeType: "{type}"' - .format(host=node['host'], type=node['type'])) + raise ValueError( + f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'" + ) @staticmethod def vpp_lb_add_del_as(node, **kwargs): @@ -139,41 +152,45 @@ class LoadBalancerUtil(object): as_addr: The application server address. (str) is_del: 1 if the VIP should be removed otherwise 0. (int) is_flush: 1 if the sessions related to this AS should be flushed - otherwise 0. (int) + otherwise 0. (int) :type node: dict :type kwargs: dict :returns: Nothing. :raises ValueError: If the node has an unknown node type. """ - if node['type'] == NodeType.DUT: - cmd = 'lb_add_del_as' - err_msg = 'Failed to add lb as on host {host}'.format( - host=node['host']) - - vip_addr = kwargs.pop('vip_addr', '0.0.0.0') - protocol = kwargs.pop('protocol', 255) - port = kwargs.pop('port', 0) - as_addr = kwargs.pop('as_addr', '0.0.0.0') - is_del = kwargs.pop('is_del', 0) - is_flush = kwargs.pop('is_flush', 0) - - vip_addr = ip_address(unicode(vip_addr)).packed - as_addr = ip_address(unicode(as_addr)).packed - - args = dict(pfx={'len': 128, - 'address': {'un': {'ip4': vip_addr}, 'af': 0}}, - protocol=protocol, - port=port, - as_address={'un': {'ip4': as_addr}, 'af': 0}, - is_del=is_del, - is_flush=is_flush) + if node[u"type"] == NodeType.DUT: + cmd = u"lb_add_del_as" + err_msg = f"Failed to add lb as on host {node[u'host']}" + + vip_addr = kwargs.pop(u"vip_addr", "0.0.0.0") + protocol = kwargs.pop(u"protocol", 255) + port = kwargs.pop(u"port", 0) + as_addr = kwargs.pop(u"as_addr", u"0.0.0.0") + is_del = kwargs.pop(u"is_del", 0) + is_flush = kwargs.pop(u"is_flush", 0) + + vip_addr = ip_address(vip_addr).packed + as_addr = ip_address(as_addr).packed + + args = dict( + pfx={ + u"len": 128, + u"address": {u"un": {u"ip4": vip_addr}, u"af": 0} + }, + protocol=protocol, + port=port, + as_address={u"un": {u"ip4": as_addr}, u"af": 0}, + is_del=is_del, + is_flush=is_flush + ) with PapiSocketExecutor(node) as papi_exec: papi_exec.add(cmd, **args).get_reply(err_msg) else: - raise ValueError('Node {host} has unknown NodeType: "{type}"' - .format(host=node['host'], type=node['type'])) + raise ValueError( + f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'" + ) @staticmethod def vpp_lb_add_del_intf_nat4(node, **kwargs): @@ -190,18 +207,21 @@ class LoadBalancerUtil(object): :returns: Nothing. :raises ValueError: If the node has an unknown node type. """ - if node['type'] == NodeType.DUT: - cmd = 'lb_add_del_intf_nat4' - err_msg = 'Failed to add interface nat4 on host {host}'.format( - host=node['host']) + if node[u"type"] == NodeType.DUT: + cmd = u"lb_add_del_intf_nat4" + err_msg = f"Failed to add interface nat4 on host {node[u'host']}" - is_add = kwargs.pop('is_add', True) - interface = kwargs.pop('interface', 0) + is_add = kwargs.pop(u"is_add", True) + interface = kwargs.pop(u"interface", 0) sw_if_index = Topology.get_interface_sw_index(node, interface) - args = dict(is_add=is_add, sw_if_index=sw_if_index) + args = dict( + is_add=is_add, + sw_if_index=sw_if_index + ) with PapiSocketExecutor(node) as papi_exec: papi_exec.add(cmd, **args).get_reply(err_msg) else: - raise ValueError('Node {host} has unknown NodeType: "{type}"' - .format(host=node['host'], type=node['type'])) + raise ValueError( + f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'" + )