summaryrefslogtreecommitdiffstats
path: root/clover/controller
diff options
context:
space:
mode:
Diffstat (limited to 'clover/controller')
-rw-r--r--clover/controller/control/api/halyard.py167
-rw-r--r--clover/controller/control/control.py2
-rw-r--r--clover/controller/docker/Dockerfile3
-rwxr-xr-xclover/controller/process/gunicorn_process.sh5
-rw-r--r--clover/controller/process/nginx.conf1
5 files changed, 176 insertions, 2 deletions
diff --git a/clover/controller/control/api/halyard.py b/clover/controller/control/api/halyard.py
new file mode 100644
index 0000000..861de59
--- /dev/null
+++ b/clover/controller/control/api/halyard.py
@@ -0,0 +1,167 @@
+# 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 logging
+import lib.halyard_base as base
+
+halyard = Blueprint('halyard', __name__)
+
+@halyard.route("/halyard/addkube", methods=['GET', 'POST'])
+def addkubernetes():
+ try:
+ p = request.json
+ accountname = p['Name']
+ providerversion = p['ProviderVersion']
+ Registries = p['DockerRegistries']
+ kubeconfigFile = p['KubeconfigFile']
+
+ except (KeyError, ValueError) as e:
+ logging.debug(e)
+ return Response('Invalid value in kubernetes yaml', status=400)
+
+ try:
+ if base.is_account_exist("kubernetes",accountname):
+ return Response("account name has already exist", status=400)
+ if providerversion == None or providerversion == 'V1':
+ providerversion = None
+ if 0 == len(Registries) or isinstance(Registries, list) == False:
+ return Response("V1 provider require dockerRegistries", status=400)
+
+ dockerRegistries = []
+ for registry in Registries:
+ registryname = registry['AccountName']
+ if not base.is_account_exist("dockerRegistry",registryname):
+ return Response("docker registry: {0} don't exist".format(registryname),
+ status=400)
+ docker_dict = {"accountName":registryname, "namespaces":[]}
+ dockerRegistries.append(docker_dict)
+ data = {
+ "name": accountname,
+ "requiredGroupMembership": [],
+ "providerVersion": providerversion,
+ "permissions": {},
+ "dockerRegistries": dockerRegistries,
+ "context": None,
+ "cluster": None,
+ "user": None,
+ "configureImagePullSecrets": "true",
+ "serviceAccount": None,
+ "cacheThreads": 1,
+ "namespaces": [],
+ "omitNamespaces": [],
+ "kinds": [],
+ "omitKinds": [],
+ "customResources": [],
+ "cachingPolicies": [],
+ "kubeconfigFile": kubeconfigFile,
+ "kubeconfigContents": None,
+ "kubectlPath": None,
+ "namingStrategy": None,
+ "skin": None,
+ "debug": None,
+ "oauthScopes": [],
+ "oauthServiceAccount": None,
+ "oAuthServiceAccount": None,
+ "oAuthScopes": []
+ }
+ result = base.add_account("kubernetes",data)
+ except Exception as e:
+ logging.debug(e)
+ return Response('Failed add the kubernetes provider', status=400)
+ return result
+
+@halyard.route("/halyard/addregistry", methods=['GET', 'POST'])
+def add_docker_registry():
+ try:
+ p = request.json
+ accountname = p['name']
+ address = p['address']
+ repositories = p['repositories']
+ if p.has_key('username') and p.has_key('password'):
+ username = p['username']
+ password = p['password']
+ else:
+ username = None
+ password = None
+
+ except (KeyError, ValueError) as e:
+ logging.debug(e)
+ return Response('Invalid value in kubernetes yaml', status=400)
+
+ try:
+ if base.is_account_exist("dockerRegistry",accountname):
+ return Response("account name has already exist", status=400)
+
+ data = {
+ "name": accountname,
+ "requiredGroupMembership": [],
+ "providerVersion": None,
+ "permissions": {},
+ "address": address,
+ "username": username,
+ "password": password,
+ "email": "fake.email@spinnaker.io",
+ "cacheIntervalSeconds": 30,
+ "clientTimeoutMillis": 60000,
+ "cacheThreads": 1,
+ "paginateSize": 100,
+ "sortTagsByDate": False,
+ "trackDigests": False,
+ "insecureRegistry": False,
+ "repositories": repositories,
+ "passwordFile": None,
+ "dockerconfigFile": None
+ }
+ result = base.add_account("dockerRegistry",data)
+ if result != "SUCCEEDED":
+ return Response('Failed to add the docker registry', status=400)
+
+ except Exception as e:
+ logging.debug(e)
+ return Response('Failed to add the docker registry', status=400)
+ return result
+
+@halyard.route("/halyard/delprovider", methods=['GET', 'POST'])
+def delprovider():
+ try:
+ p = request.json
+ provider = p['provider']
+ name = p['name']
+ except (KeyError, ValueError) as e:
+ logging.debug(e)
+ return Response('Input invalid value', status=400)
+ try:
+ result = base.delete_account(provider, name)
+ if result != "SUCCEEDED":
+ print "Delete account failed"
+ return Response('Failed to delete the {0} provider'.format(provider), status=400)
+
+ apply_result = base.apply_deploy()
+ if apply_result != "SUCCEEDED":
+ print "Delete account failed"
+ return Response('Failed to delete the {0} provider'.format(provider), status=400)
+
+ except Exception as e:
+ logging.debug(e)
+ return Response('Failed to delete the kubernetes provider', status=400)
+
+ return apply_result
+
+
+@halyard.route("/halyard/account", methods=['GET', 'POST'])
+def getprovider():
+ try:
+ provider = ""
+ p = request.json
+ provider = p['name']
+ account_list = base.list_accounts(provider)
+ result = ':'.join(account_list)
+ except Exception as e:
+ logging.debug(e)
+ return Response('get {0} failed'.format(provider), status=400)
+ return result
diff --git a/clover/controller/control/control.py b/clover/controller/control/control.py
index 54f713a..70eeacd 100644
--- a/clover/controller/control/control.py
+++ b/clover/controller/control/control.py
@@ -9,6 +9,7 @@ from flask import Flask, request, jsonify
from views.dashboard import simple_page
from api.collector import collector
from api.snort import snort
+from api.halyard import halyard
from api.nginx import nginx
from api.jmeter import jmeter
from api.file_upload import file_upload
@@ -23,6 +24,7 @@ try:
application.register_blueprint(simple_page)
application.register_blueprint(collector)
application.register_blueprint(snort)
+ application.register_blueprint(halyard)
application.register_blueprint(nginx)
application.register_blueprint(jmeter)
application.register_blueprint(file_upload)
diff --git a/clover/controller/docker/Dockerfile b/clover/controller/docker/Dockerfile
index 52d4673..9b8241f 100644
--- a/clover/controller/docker/Dockerfile
+++ b/clover/controller/docker/Dockerfile
@@ -15,7 +15,7 @@ RUN apt-get update && apt-get install -y \
# Install required python packages
RUN python -m pip install gunicorn flask \
- grpcio protobuf jinja2 redis
+ grpcio protobuf jinja2 redis requests
COPY /control /control
COPY /process /process
@@ -35,6 +35,7 @@ RUN cp clover/clover/collector/grpc/collector_pb2_grpc.py /control/api
RUN cp clover/clover/collector/grpc/collector_pb2.py /control/api
RUN cp clover/clover/tools/jmeter/jmeter-master/grpc/jmeter_pb2_grpc.py /control/api
RUN cp clover/clover/tools/jmeter/jmeter-master/grpc/jmeter_pb2.py /control/api
+RUN cp -rf clover/clover/spinnaker/lib/ /control/api
RUN rm -rf /grpc_temp
WORKDIR /process
diff --git a/clover/controller/process/gunicorn_process.sh b/clover/controller/process/gunicorn_process.sh
index 033596f..d2fa4ef 100755
--- a/clover/controller/process/gunicorn_process.sh
+++ b/clover/controller/process/gunicorn_process.sh
@@ -8,4 +8,7 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
-gunicorn --bind 0.0.0.0:8000 --chdir /control wsgi
+# it take a long time to add kubernetes. So I increse the timeout
+# and workers
+
+gunicorn --bind 0.0.0.0:8000 -t 1200 -w 5 --chdir /control wsgi
diff --git a/clover/controller/process/nginx.conf b/clover/controller/process/nginx.conf
index 5b26922..5d2dca9 100644
--- a/clover/controller/process/nginx.conf
+++ b/clover/controller/process/nginx.conf
@@ -11,6 +11,7 @@ http {
listen 80;
location / {
+ proxy_read_timeout 1200;
include proxy_params;
proxy_pass http://localhost:8000;
}