diff options
Diffstat (limited to 'clover/controller/control')
-rw-r--r-- | clover/controller/control/api/halyard.py | 167 | ||||
-rw-r--r-- | clover/controller/control/control.py | 2 |
2 files changed, 169 insertions, 0 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) |