Source code for magnum_ui.api.rest.magnum

#  Copyright 2015 Cisco Systems.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

from django.views import generic

from magnum_ui.api import magnum

from openstack_dashboard.api import neutron
from openstack_dashboard.api.rest import urls
from openstack_dashboard.api.rest import utils as rest_utils


[docs]def change_to_id(obj): """Change key named 'uuid' to 'id' Magnum returns objects with a field called 'uuid' many of Horizons directives however expect objects to have a field called 'id'. """ obj['id'] = obj.pop('uuid') return obj
[docs]@urls.register class ClusterTemplate(generic.View): """API for retrieving a single cluster template""" url_regex = r'container_infra/cluster_templates/(?P<template_id>[^/]+)$'
[docs] @rest_utils.ajax() def get(self, request, template_id): """Get a specific cluster template""" return change_to_id(magnum.cluster_template_show(request, template_id) .to_dict())
[docs] @rest_utils.ajax(data_required=True) def patch(self, request, template_id): """Update a Cluster Template. Returns the Cluster Template object on success. """ params = request.DATA updated_template = magnum.cluster_template_update( request, template_id, **params) return rest_utils.CreatedResponse( '/api/container_infra/cluster_template/%s' % template_id, updated_template.to_dict())
[docs]@urls.register class ClusterTemplates(generic.View): """API for Magnum Cluster Templates""" url_regex = r'container_infra/cluster_templates/$'
[docs] @rest_utils.ajax() def get(self, request): """Get a list of the Cluster Templates for a project. The returned result is an object with property 'items' and each item under this is a Cluster Template. """ result = magnum.cluster_template_list(request) return {'items': [change_to_id(n.to_dict()) for n in result]}
[docs] @rest_utils.ajax(data_required=True) def delete(self, request): """Delete one or more Cluster Templates by id. Returns HTTP 204 (no content) on successful deletion. """ for template_id in request.DATA: magnum.cluster_template_delete(request, template_id)
[docs] @rest_utils.ajax(data_required=True) def post(self, request): """Create a new Cluster Template. Returns the new ClusterTemplate object on success. """ new_template = magnum.cluster_template_create(request, **request.DATA) return rest_utils.CreatedResponse( '/api/container_infra/cluster_template/%s' % new_template.uuid, new_template.to_dict())
[docs]@urls.register class Cluster(generic.View): """API for retrieving a single cluster""" url_regex = r'container_infra/clusters/(?P<cluster_id>[^/]+)$'
[docs] @rest_utils.ajax() def get(self, request, cluster_id): """Get a specific cluster""" return change_to_id(magnum.cluster_show(request, cluster_id).to_dict())
[docs] @rest_utils.ajax(data_required=True) def patch(self, request, cluster_id): """Update a Cluster. Returns the Cluster object on success. """ params = request.DATA updated_cluster = magnum.cluster_update( request, cluster_id, **params) return rest_utils.CreatedResponse( '/api/container_infra/cluster/%s' % cluster_id, updated_cluster.to_dict())
[docs]@urls.register class Clusters(generic.View): """API for Magnum Clusters""" url_regex = r'container_infra/clusters/$'
[docs] @rest_utils.ajax() def get(self, request): """Get a list of the Clusters for a project. The returned result is an object with property 'items' and each item under this is a Cluster. """ result = magnum.cluster_list(request) return {'items': [change_to_id(n.to_dict()) for n in result]}
[docs] @rest_utils.ajax(data_required=True) def delete(self, request): """Delete one or more Clusters by id. Returns HTTP 204 (no content) on successful deletion. """ for cluster_id in request.DATA: magnum.cluster_delete(request, cluster_id)
[docs] @rest_utils.ajax(data_required=True) def post(self, request): """Create a new Cluster. Returns the new Cluster object on success. """ new_cluster = magnum.cluster_create(request, **request.DATA) return rest_utils.CreatedResponse( '/api/container_infra/cluster/%s' % new_cluster.uuid, new_cluster.to_dict())
[docs]@urls.register class Certificate(generic.View): """API for retrieving a single certificate""" url_regex = r'container_infra/certificates/(?P<cluster_id>[^/]+)$'
[docs] @rest_utils.ajax() def get(self, request, cluster_id): """Get a certificate from a cluster. Returns the CA.pem string on success """ ca = magnum.certificate_show(request, cluster_id) return ca.to_dict()
[docs]@urls.register class Certificates(generic.View): """API for Magnum Certificates""" url_regex = r'container_infra/certificates/$'
[docs] @rest_utils.ajax(data_required=True) def post(self, request): """Create a new Certificate. Returns the new Cert.pem string from csr for a cluster on success. """ new_cert = magnum.certificate_create(request, **request.DATA) return rest_utils.CreatedResponse( '/api/container_infra/certificates/', new_cert.to_dict())
[docs]@urls.register class Networks(generic.View): """API for Neutron networks for Cluster Templates creation""" url_regex = r'container_infra/networks/$'
[docs] @rest_utils.ajax() def get(self, request): """Get a list of the Networks for a project. Networks includes external and private. Also, each network has subnets. The returned result is an object with property 'items' and each item under this is a Network. """ tenant_id = request.user.tenant_id result = neutron.network_list_for_tenant(request, tenant_id, include_external=True) return {'items': [n.to_dict() for n in result]}