CSCfi/pebbles

View on GitHub
pebbles/views/clusters.py

Summary

Maintainability
A
3 hrs
Test Coverage
import flask_restful as restful
from flask import Blueprint as FlaskBlueprint, current_app
from flask_restful import fields, marshal_with

from pebbles.utils import requires_admin, load_cluster_config
from pebbles.views.commons import auth

clusters = FlaskBlueprint('clusters', __name__)

# TODO remove 'url' when all clusters use 'apiUrl'
cluster_fields = {
    'name': fields.String,
    'driver': fields.String,
    'url': fields.String,
    'api_url': fields.String,
    'app_domain': fields.String,
    'namespace_prefix': fields.String,
}


class ClusterList(restful.Resource):
    @auth.login_required
    @requires_admin
    @marshal_with(cluster_fields)
    def get(self):
        if 'TEST_MODE' not in current_app.config:
            cluster_config = load_cluster_config(load_passwords=False)
        else:
            # rig unit tests to use dummy data
            cluster_config = dict(clusters=[
                dict(name='dummy_cluster_1', driver='KubernetesLocalDriver'),
                dict(name='dummy_cluster_2', driver='KubernetesLocalDriver'),
            ])

        # convert camel case to snake case. camel cased keys will be ignored in marshalling
        for cluster in cluster_config.get('clusters', []):
            if 'apiUrl' in cluster.keys():
                cluster['api_url'] = cluster['apiUrl']
            if 'appDomain' in cluster.keys():
                cluster['app_domain'] = cluster['appDomain']
            if 'namespacePrefix' in cluster.keys():
                cluster['namespace_prefix'] = cluster['namespacePrefix']

        return cluster_config.get('clusters', [])