コード例 #1
0
ファイル: api.py プロジェクト: Zipopasha/pythonProjectFlask
                serializer = serializer_class(node, data=data)
                if serializer.is_valid():
                    kwargs.update(serializer.process_post())
                else:
                    errors.update(serializer.errors)
        if errors:
            raise exceptions.ParseError(detail=errors)

        # initialize firmware configuration
        base_image = BaseImage.objects.get(pk=kwargs.pop('base_image_id'))
        async = True
        success_status = status.HTTP_202_ACCEPTED

        # allow asynchronous requests
        if '201-created' == request.META.get('HTTP_EXPECT', None):
            async = False
            success_status = status.HTTP_201_CREATED

        # call firmware build task
        try:
            build = Build.build(node, base_image, async=async, **kwargs)
        except ConcurrencyError as e:
            raise exceptions.Throttled(detail=e.message)

        serializer = self.serializer_class(build)
        return Response(serializer.data, status=success_status)


insert_ctl(NodeDetail, Firmware)
api.register(BaseImageList, BaseImageDetail)
コード例 #2
0
ファイル: api.py プロジェクト: glic3rinu/confine-controller
                serializer = serializer_class(node, data=data)
                if serializer.is_valid():
                    kwargs.update(serializer.process_post())
                else:
                    errors.update(serializer.errors)
        if errors:
            raise exceptions.ParseError(detail=errors)
        
        # initialize firmware configuration
        base_image = BaseImage.objects.get(pk=kwargs.pop('base_image_id'))
        async = True
        success_status = status.HTTP_202_ACCEPTED
        
        # allow asynchronous requests
        if '201-created' == request.META.get('HTTP_EXPECT', None):
            async = False
            success_status = status.HTTP_201_CREATED
        
        # call firmware build task
        try:
            build = Build.build(node, base_image, async=async, **kwargs)
        except ConcurrencyError as e:
            raise exceptions.Throttled(detail=e.message)
        
        serializer = self.serializer_class(build)
        return Response(serializer.data, status=success_status)


insert_ctl(NodeDetail, Firmware)
api.register(BaseImageList, BaseImageDetail)
コード例 #3
0
    """
    **Relation type:** [`http://confine-project.eu/rel/controller/do-request-mgmt-cert`](
        http://confine-project.eu/rel/controller/do-request-mgmt-cert)
    
    Contains the controller API function URI used to upload a certificate
    signing request (CSR) to be signed by the testbed CA. The distinguished
    name of the request must match this host's management address.
    
    POST data: `ASCII-armored PEM representation of the CSR as a string.`
    
    Response data: a JSON document with a `/cert` member containing the
    `ASCII-armored PEM representation of the signed certificate`.
    """
    url_name = 'request-cert'
    rel = 'http://confine-project.eu/rel/controller/do-request-mgmt-cert'

    def post(self, request, *args, **kwargs):
        csr = request.DATA
        node = get_object_or_404(Node, pk=kwargs.get('pk'))
        self.check_object_permissions(self.request, node)
        try:
            validate_csr(csr, node.mgmt_net.addr)
        except Exception as e:
            raise exceptions.ParseError(detail='Malformed CSR: %s' % e.message)
        signed_cert = node.mgmt_net.sign_cert_request(csr.strip())
        response_data = {'cert': signed_cert}
        return Response(response_data, status=status.HTTP_202_ACCEPTED)


insert_ctl(NodeDetail, RequestCert)
コード例 #4
0
ファイル: api.py プロジェクト: m00dy/controller

class State(generics.RetrieveAPIView):
    """Base State controller view that exposes state information."""
    url_name = 'state'
    rel = 'http://confine-project.eu/rel/controller/state'
    serializer_class = StateSerializer
    model = None # should be defined on subclasses
    
    def __init__(self, *args, **kwargs):
        super(State, self).__init__(*args, **kwargs)
        if self.model is None:
            raise ValueError("You should define 'model' attribute.")
    
    def get(self, request, pk, *args, **kwargs):
        obj = get_object_or_404(self.model, pk=pk)
        serializer = self.get_serializer(obj.state)
        return Response(serializer.data)


class NodeState(State):
    model = Node


class SliverState(State):
    model = Sliver


insert_ctl(NodeDetail, NodeState)
insert_ctl(SliverDetail, SliverState)
コード例 #5
0
ファイル: api.py プロジェクト: Zipopasha/pythonProjectFlask
from __future__ import absolute_import

from api import generics
from api.utils import insert_ctl
from nodes.api import NodeDetail

from .models import NodeGeolocation
from .serializers import NodeGeolocationSerializer


class Gis(generics.RetrieveUpdateDestroyAPIView):
    url_name = 'gis'
    rel = 'http://confine-project.eu/rel/controller/gis'
    serializer_class = NodeGeolocationSerializer
    model = NodeGeolocation
    list = False


insert_ctl(NodeDetail, Gis)
コード例 #6
0
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        raise exceptions.ParseError(detail='This endpoint only accepts null data')
    
    def put(self, request, pk, **kwargs):
        node = get_object_or_404(Node, pk=pk)
        serializer = self.serializer_class(data=request.DATA)
        if serializer.is_valid():
            data = serializer.data
            for action in ['stop', 'start']:
                if data.get(action):
                    try:
                        vct_node(action, node)
                    except CommandError as e:
                        return Response({"detail": str(e)},
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
            state = get_vct_node_state(node)
            serializer.data['state'] = state
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    def patch(self, request, pk, **kwargs):
        return self.put(request, pk, **kwargs)
    
    def delete(self, request, pk, format=None):
        node = get_object_or_404(Node, pk=pk)
        vct_node('remove', node)
        return Response(status=status.HTTP_204_NO_CONTENT)


insert_ctl(NodeDetail, VMView)
コード例 #7
0
ファイル: api.py プロジェクト: glic3rinu/confine-controller
    """
    **Relation type:** [`http://confine-project.eu/rel/controller/do-request-mgmt-cert`](
        http://confine-project.eu/rel/controller/do-request-mgmt-cert)
    
    Contains the controller API function URI used to upload a certificate
    signing request (CSR) to be signed by the testbed CA. The distinguished
    name of the request must match this host's management address.
    
    POST data: `ASCII-armored PEM representation of the CSR as a string.`
    
    Response data: a JSON document with a `/cert` member containing the
    `ASCII-armored PEM representation of the signed certificate`.
    """
    url_name = 'request-cert'
    rel = 'http://confine-project.eu/rel/controller/do-request-mgmt-cert'
    
    def post(self, request, *args, **kwargs):
        csr = request.DATA
        node = get_object_or_404(Node, pk=kwargs.get('pk'))
        self.check_object_permissions(self.request, node)
        try:
            validate_csr(csr, node.mgmt_net.addr)
        except Exception as e:
            raise exceptions.ParseError(detail='Malformed CSR: %s' % e.message)
        signed_cert = node.mgmt_net.sign_cert_request(csr.strip())
        response_data = {'cert': signed_cert}
        return Response(response_data, status=status.HTTP_202_ACCEPTED)


insert_ctl(NodeDetail, RequestCert)
コード例 #8
0
        super(State, self).__init__(*args, **kwargs)
        if self.model is None:
            raise ValueError("You should define 'model' attribute.")

    def get(self, request, pk, *args, **kwargs):
        obj = get_object_or_404(self.model, pk=pk)
        serializer = self.get_serializer(obj.state)
        return Response(serializer.data)

    def post(self, request, pk, *args, **kwargs):
        """Update state data querying node API."""
        if not request.DATA:
            obj = get_object_or_404(self.model, pk=pk)
            opts = self.model._meta
            module = '%s.%s' % (opts.app_label, opts.object_name)
            get_state.delay(module, ids=[obj.pk], lock=False)
            return self.get(request, pk, *args, **kwargs)
        raise exceptions.ParseError(detail='This endpoint do not accept data')


class NodeState(State):
    model = Node


class SliverState(State):
    model = Sliver


insert_ctl(NodeDetail, NodeState)
insert_ctl(SliverDetail, SliverState)