summaryrefslogtreecommitdiffstats
path: root/clover/controller/control/api/nginx.py
diff options
context:
space:
mode:
Diffstat (limited to 'clover/controller/control/api/nginx.py')
-rw-r--r--clover/controller/control/api/nginx.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/clover/controller/control/api/nginx.py b/clover/controller/control/api/nginx.py
new file mode 100644
index 0000000..a7d902d
--- /dev/null
+++ b/clover/controller/control/api/nginx.py
@@ -0,0 +1,82 @@
+# Copyright (c) Authors of Clover
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+from flask import Blueprint, request, Response
+import grpc
+import nginx_pb2
+import nginx_pb2_grpc
+import pickle
+import logging
+
+nginx = Blueprint('nginx', __name__)
+
+
+@nginx.route("/nginx/lb", methods=['GET', 'POST'])
+def modify_lb():
+ grpc_port = '50054'
+ try:
+ p = request.json
+ try:
+ lb_name = p['lb_name']
+ nginx_grpc = lb_name + ':' + grpc_port
+ channel = grpc.insecure_channel(nginx_grpc)
+ stub = nginx_pb2_grpc.ControllerStub(channel)
+
+ s_list = []
+ for s in p['lb_list']:
+ s_list.append(s['url'])
+ lb_list = pickle.dumps(s_list)
+ response = stub.ModifyLB(nginx_pb2.ConfigLB(
+ server_port=p['server_port'], server_name=p['server_name'],
+ slb_list=lb_list,
+ slb_group=p['lb_group'], lb_path=p['lb_path']))
+ except (KeyError, ValueError) as e:
+ logging.debug(e)
+ return Response('Invalid value in LB json/yaml', status=400)
+ except Exception as e:
+ logging.debug(e)
+ if e.__class__.__name__ == "_Rendezvous":
+ return Response("Error connecting to LB via gRPC", status=400)
+ else:
+ return Response("Error modifying LB server list", status=400)
+ return response.message
+
+
+@nginx.route("/nginx/server", methods=['GET', 'POST'])
+def modify_server():
+ grpc_port = '50054'
+ try:
+ p = request.json
+ try:
+ server_name = p['server_name']
+ nginx_grpc = server_name + ':' + grpc_port
+ channel = grpc.insecure_channel(nginx_grpc)
+ stub = nginx_pb2_grpc.ControllerStub(channel)
+
+ locations = pickle.dumps(p['locations'])
+ files = pickle.dumps(p['files'])
+ response = stub.ModifyServer(nginx_pb2.ConfigServer(
+ server_port=p['server_port'], server_name=p['server_name'],
+ site_root=p['site_root'], locations=locations, files=files,
+ site_index=p['site_index'],
+ upload_path_config=p['upload_path_config'],
+ upload_path_test=p['upload_path_test']))
+ except (KeyError, ValueError) as e:
+ logging.debug(e)
+ return Response('Invalid value in server json/yaml', status=400)
+ except Exception as e:
+ logging.debug(e)
+ if e.__class__.__name__ == "_Rendezvous":
+ return Response("Error connecting to server via gRPC", status=400)
+ else:
+ return Response("Error modifying server", status=400)
+ return response.message
+
+
+@nginx.route("/nginx/test")
+def test():
+ return "<h1 style='color:blue'>Nginx API Test Response</h1>"