Skip to content
This repository was archived by the owner on Apr 1, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 30 additions & 25 deletions src/mgmt/manager/project/api/default_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,72 +50,78 @@
def setup():
logger.debug(f'Start getting data from Hazelcast')

gateway_list = None
use_arion_agent_parameter = request.args.get("use_arion_agent", default=None, type=lambda v: v.lower() == 'true')


get_data_start_time = time.time()
connect_to_hazelcast(hazelcast_ip_port)
connect_to_hazelcast(hazelcast_ip_port)

arion_gateway_cluster_set = arion_gateway_cluster_map.entry_set().result()
logger.debug(f'GOT {len(arion_gateway_cluster_set)} ArionGatewayClusters from Hazelcast')

arion_nodes_set = arion_nodes_map.entry_set().result()
logger.debug(f'GOT {len(arion_nodes_set)} ArionNodes from Hazelcast')

vpc_set = vpc_map.entry_set().result()
logger.debug(f'GOT {len(vpc_set)} VPCs from Hazelcast')

routing_rule_set = routing_rule_map.entry_set().result()
logger.debug(f'GOT {len(routing_rule_set)} RoutingRules from Hazelcast')

get_data_end_time = time.time()
logger.debug(f'Finished getting data from Hazelcast, it took {get_data_end_time - get_data_start_time} seconds, now start setting up with the data.')

for cluster_key, cluster in arion_gateway_cluster_set:
set_up_cluster_from_hazelcast(cluster)
time.sleep(10)

for node_key, node in arion_nodes_set:
set_up_node_from_hazelcast(node)
time.sleep(10)

for vpc_key, vpc_value in vpc_set:
current_vpc : VPC = vpc_value
vpc_response = set_up_vpc_from_hazelcast(current_vpc)
response_object = vpc_response["gws"]
routing_rules_in_current_vpc = []
print(f'Current VPC vni: {current_vpc.vni}')
time.sleep(10)
for routing_rule_key, routing_rule_value in routing_rule_set:
rule: RoutingRule = routing_rule_value
if rule.vni == current_vpc.vni:
routing_rules_in_current_vpc.append(rule)
set_up_ports_in_the_same_vpc_from_hazelcast(routing_rules_in_current_vpc, current_vpc.vpc_id)
time.sleep(10)


if use_arion_agent_parameter == False:
for routing_rule_key, routing_rule_value in routing_rule_set:
rule: RoutingRule = routing_rule_value
if rule.vni == current_vpc.vni:
routing_rules_in_current_vpc.append(rule)
set_up_ports_in_the_same_vpc_from_hazelcast(routing_rules_in_current_vpc, current_vpc.vpc_id)
time.sleep(10)
else:
print(f'user_arion_agent={use_arion_agent_parameter}, thus not setting up ports in this call.')


setup_finish_time = time.time()

logger.debug(f'Finished setting up, it took {setup_finish_time - get_data_end_time} seconds..')

return jsonify(response_object), 201

def connect_to_hazelcast(hazelcast_ip_port):
global hazelcast_client
hazelcast_client = hazelcast.HazelcastClient(
cluster_members=[hazelcast_ip_port],
cluster_members=[hazelcast_ip_port],
data_serializable_factories=hazelcast_serialization_factory)
# GET all exsiting maps from Hazelcast
global arion_gateway_cluster_map
arion_gateway_cluster_map = hazelcast_client.get_map('com.futurewei.common.model.ArionGatewayCluster')

global arion_nodes_map
arion_nodes_map = hazelcast_client.get_map('com.futurewei.common.model.ArionNode')

global vpc_map
vpc_map = hazelcast_client.get_map('com.futurewei.common.model.VPC')

global routing_rule_map
# new table name: com.futurewei.common.model.NeighborRule
routing_rule_map = hazelcast_client.get_map('com.futurewei.common.model.NeighborRule')

def added(event):
number_of_entries_in_map = len(routing_rule_map.entry_set().result())
logger.info(
Expand All @@ -139,5 +145,4 @@ def removed(event):
routing_rule_map.add_entry_listener(include_value=True, added_func=added)
routing_rule_map.add_entry_listener(include_value=True, removed_func=removed)
logger.info('Finished setting up with Hazelcast.')
return

return
4 changes: 2 additions & 2 deletions src/mgmt/manager/project/api/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ def set_up_node_from_hazelcast(arion_node: ArionNode):
# sort these droplets in descending order, so droplet with the most IPs will be in the front.
droplet_that_can_give_ip_mac.sort(key=lambda x : len(x['spec']['ip']), reverse=True)
# only one IP/mac for other droplets
while len(ip_for_new_droplet) < 1:
while len(ip_for_new_droplet) < number_of_ip_new_droplet_gets:
for droplet in droplet_that_can_give_ip_mac:
droplet_spec = droplet['spec']
droplet_ip_list = droplet_spec['ip']
Expand Down Expand Up @@ -330,7 +330,7 @@ def all_nodes():
# sort these droplets in descending order, so droplet with the most IPs will be in the front.
droplet_that_can_give_ip_mac.sort(key=lambda x : len(x['spec']['ip']), reverse=True)
# only one IP/mac for other droplets
while len(ip_for_new_droplet) < 1:
while len(ip_for_new_droplet) < number_of_ip_new_droplet_gets:
for droplet in droplet_that_can_give_ip_mac:
droplet_spec = droplet['spec']
droplet_ip_list = droplet_spec['ip']
Expand Down