summaryrefslogtreecommitdiffstats
path: root/clover/controller
diff options
context:
space:
mode:
authorearrage <eddie.arrage@huawei.com>2018-10-11 14:11:31 -0700
committerearrage <eddie.arrage@huawei.com>2018-10-11 14:12:31 -0700
commitb850f07e5abce7545243eeb674495b6960d6d105 (patch)
tree12e706711538298d7b01fbe11a2d4e15276d8f15 /clover/controller
parentee2169ee4b8fb3539ad173fbc1557b54b2f2216f (diff)
Add nginx services control functionality
- Modify nginx server template to use clover-controller in clover-system namespace for file upload - Add ability to set nginx server paths and move uploaded files in clover-controller and set/get file upload metadata - Add cloverctl commands to set nginx server and lb configurations - Add example yaml files to configure nginx server and lb v1/v2 from cloverctl - Modify service definition for http-lb versions to distinguish the two versions for GRPC messaging from clover-controller in SDC deployment yaml Change-Id: I5c6866c5ff3de358939c58ea8c0bde64a69c6eca Signed-off-by: earrage <eddie.arrage@huawei.com>
Diffstat (limited to 'clover/controller')
-rw-r--r--clover/controller/__init__.py11
-rw-r--r--clover/controller/control/__init__.py11
-rw-r--r--clover/controller/control/api/file_upload.py38
-rw-r--r--clover/controller/control/api/nginx.py49
4 files changed, 72 insertions, 37 deletions
diff --git a/clover/controller/__init__.py b/clover/controller/__init__.py
index d67a6c0..e69de29 100644
--- a/clover/controller/__init__.py
+++ b/clover/controller/__init__.py
@@ -1,11 +0,0 @@
-from flask import Flask, Response
-
-
-app = Flask(__name__)
-
-@app.route("/")
-def index():
- return Response("It works!"), 200
-
-if __name__ == "__main__":
- app.run(debug=True)
diff --git a/clover/controller/control/__init__.py b/clover/controller/control/__init__.py
index d67a6c0..e69de29 100644
--- a/clover/controller/control/__init__.py
+++ b/clover/controller/control/__init__.py
@@ -1,11 +0,0 @@
-from flask import Flask, Response
-
-
-app = Flask(__name__)
-
-@app.route("/")
-def index():
- return Response("It works!"), 200
-
-if __name__ == "__main__":
- app.run(debug=True)
diff --git a/clover/controller/control/api/file_upload.py b/clover/controller/control/api/file_upload.py
index a479c30..a532bc8 100644
--- a/clover/controller/control/api/file_upload.py
+++ b/clover/controller/control/api/file_upload.py
@@ -5,24 +5,50 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
-from flask import Blueprint, request, Response
+from flask import Blueprint, request, Response, jsonify
import redis
import logging
file_upload = Blueprint('file_upload', __name__)
-HOST_IP = 'redis'
+HOST_IP = 'redis.default'
@file_upload.route("/upload", methods=['GET', 'POST'])
-def upload_meta():
+def set_upload_metadata():
try:
+ response = "Uploaded file(s) successfully"
content = request.form
+ logging.debug(content)
r = redis.StrictRedis(host=HOST_IP, port=6379, db=0)
- response = content.get('upload.name')
- r.set('upload_meta', response)
+ # Try various variable names
+ upload_var_names = ['upload', 'file1', 'file2', 'file3',
+ 'file4', 'file5', 'file6']
+ for n in upload_var_names:
+ try:
+ param_name = n + '.name'
+ meta_name = content.get(param_name)
+ if meta_name:
+ param_path = n + '.path'
+ param_server = n + '.server'
+ meta_path = content.get(param_path)
+ meta_server = content.get(param_server)
+ entry = meta_name + ':' + meta_path + ':' + meta_server
+ r.sadd('upload_metadata', entry)
+ except Exception as e:
+ print("no metadata")
except Exception as e:
logging.debug(e)
- r.set('upload_meta', "failure")
return Response('Unable to write file metadata to redis', status=400)
return response
+
+
+@file_upload.route("/upload/get", methods=['GET', 'POST'])
+def get_upload_metadata():
+ try:
+ r = redis.StrictRedis(host=HOST_IP, port=6379, db=0)
+ response = jsonify(list(r.smembers('upload_metadata')))
+ except Exception as e:
+ logging.debug(e)
+ return Response('Unable to retrieve upload metadata', status=400)
+ return response
diff --git a/clover/controller/control/api/nginx.py b/clover/controller/control/api/nginx.py
index ba99b94..a7d902d 100644
--- a/clover/controller/control/api/nginx.py
+++ b/clover/controller/control/api/nginx.py
@@ -15,28 +15,28 @@ import logging
nginx = Blueprint('nginx', __name__)
-@nginx.route("/nginx/slb", methods=['GET', 'POST'])
-def slblist():
+@nginx.route("/nginx/lb", methods=['GET', 'POST'])
+def modify_lb():
grpc_port = '50054'
try:
p = request.json
try:
- slb_name = p['slb_name']
- nginx_grpc = slb_name + ':' + grpc_port
+ 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['slb_list']:
+ for s in p['lb_list']:
s_list.append(s['url'])
- slb_list = pickle.dumps(s_list)
+ lb_list = pickle.dumps(s_list)
response = stub.ModifyLB(nginx_pb2.ConfigLB(
server_port=p['server_port'], server_name=p['server_name'],
- slb_list=slb_list,
- slb_group=p['slb_group'], lb_path=p['lb_path']))
+ 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 test plan json/yaml', status=400)
+ return Response('Invalid value in LB json/yaml', status=400)
except Exception as e:
logging.debug(e)
if e.__class__.__name__ == "_Rendezvous":
@@ -46,6 +46,37 @@ def slblist():
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>"