예제 #1
0
 def create_options(self, request):
     client = self.request.user.clients.filter(
         services__openstack_project__isnull=False).first()
     if not client:
         raise APIConflict(_('No client with an OpenStack project found'))
     selected_region, regions = get_regions(request, for_end_user=True)
     external_networks = [{
         'name': net.name,
         'id': net.id,
         'region': net.region
     } for net in Network.objects.get_networks_for_project(
         project_id=client.first_project.project_id, external=True).filter(
             router_external=True)]
     return Response({
         'regions':
         regions,
         'external_networks':
         external_networks,
         'selected_region':
         selected_region,
         'can_create_resource':
         check_if_enough_credit(
             client=self.request.user.clients.all().first(),
             update_uptodate_credit=False,
         ),
     })
예제 #2
0
    def create_options(self, request, *args, **kwargs):
        selected_region, regions = get_regions(request, filter_for='volumes')
        # get volume size increments
        conf = OSConfig()
        volume_size_increments = conf.volume_size_increments
        # get volume types
        volume_types = []
        for volume_type in VolumeType.objects.public().filter(
                region=selected_region):
            type_display = volume_type.description if volume_type.description else volume_type.name
            volume_types.append({
                'name':
                volume_type.name,
                'type_display':
                type_display,
                'sizeIncrement':
                self.get_size_increment(volume_size_increments,
                                        volume_type.name, selected_region)
            })
        selected_client = request.query_params.get('client', None)
        db_project = None
        if selected_client:
            try:
                db_project = Client.objects.get(
                    pk=selected_client).first_project
            except Client.DoesNotExist as e:
                LOG.error(e)

        available_images = Image.objects.filter(region=selected_region)
        if db_project:
            available_images = available_images.get_images_for_project(
                project_id=db_project.project_id)
        else:
            available_images = available_images.public()
        if selected_client:
            available_volumes = Volume.objects.filter(
                project__service__client__id=selected_client,
                region=selected_region)
            available_volumes = available_volumes.values(
                'id', 'name', 'region')
        else:
            available_volumes = []

        volume_sources = {
            'image':
            available_images.values('id', 'name', 'type', 'region',
                                    'min_disk'),
            'volume':
            available_volumes
        }

        return Response({
            'types': volume_types,
            'regions': regions,
            'sources': volume_sources,
            'selected_region': selected_region
        })
예제 #3
0
 def create_options(self, request):
     selected_region, regions = get_regions(request)
     external_networks = [{
         'name': net.name,
         'id': net.id,
         'region': net.region
     } for net in Network.objects.filter(router_external=True)]
     return Response({
         'regions': regions,
         'external_networks': external_networks,
         'selected_region': selected_region
     })
예제 #4
0
 def filter_options(self, request, *args, **kwargs):
     del args, kwargs  # unused
     selected_region, regions = get_regions(request,
                                            filter_for='volumes',
                                            for_end_user=True)
     filter_options = {
         'regions':
         regions,
         'statuses':
         statuses_dict_to_statuses_choices(VolumeStatus.status_map.items()),
     }
     return Response(filter_options)
예제 #5
0
 def create_options(self, request, *args, **kwargs):
     selected_region, regions = get_regions(request, for_end_user=True)
     return Response({
         'regions':
         regions,
         'selected_region':
         selected_region,
         'can_create_resource':
         check_if_enough_credit(
             client=self.request.user.clients.all().first(),
             update_uptodate_credit=False,
         ),
     })
예제 #6
0
 def create_options(self, request):
     selected_region, regions = get_regions(request, for_end_user=True)
     return Response({
         'regions':
         RegionSerializer(instance=regions, many=True).data,
         'selected_region':
         selected_region,
         'can_create_resource':
         check_if_enough_credit(
             client=self.request.user.clients.all().first(),
             update_uptodate_credit=False,
         )
     })
예제 #7
0
    def create_options(self, request, *args, **kwargs):
        del args, kwargs  # unused

        selected_region, regions = get_regions(request)
        create_options = {'regions': regions,
                          'container_formats': [x for (x, y) in OpenstackImage.IMAGE_CONTAINER_FORMAT],
                          'disk_formats': [x for (x, y) in OpenstackImage.IMAGE_DISK_FORMAT],
                          'visibilities': [x for (x, y) in OpenstackImage.IMAGE_VISIBILITY],
                          'os_distros': [x for (x, y) in settings.OS_TYPES],
                          'hypervisor_types': [x for x in settings.OS_HYPERVISOR_TYPES],
                          'selected_region': selected_region,
                          'statuses': statuses_dict_to_statuses_choices(OpenstackImage.IMAGE_STATUS),
                          'allowed_formats': getattr(django_settings, 'OS_IMAGE_UPLOAD_FORMATS', [])
                          }
        return Response(create_options)
예제 #8
0
 def create_options(self, request):
     provider_types = dict()
     for provider_type in settings.OPENSTACK_NETWORK_PROVIDER_TYPES:
         try:
             provider_types[provider_type] = constants.PROVIDER_TYPES[
                 provider_type]
         except KeyError:
             LOG.error('Undefined network provider type found: {}'.format(
                 provider_type))
     selected_region, regions = get_regions(request)
     return Response({
         'regions':
         RegionSerializer(instance=regions, many=True).data,
         'provider_types':
         provider_types,
         'segmentation_id_range':
         constants.SEGMENTATION_ID_RANGE,
         'selected_region':
         selected_region
     })
예제 #9
0
 def create_options(self, request):
     selected_region, regions = get_regions(request, for_end_user=True)
     client = request.user.clients.first()
     openstack_settings = OpenstackSettings.for_client(
         client=client) if client else None
     create_options = {
         'regions':
         regions,
         'container_formats':
         [x for (x, y) in Image.IMAGE_CONTAINER_FORMAT],
         'disk_formats': [x for (x, y) in Image.IMAGE_DISK_FORMAT],
         'visibilities':
         OpenStackImageVisibility.get_user_choices(),
         'os_distros': [x for (x, y) in settings.OS_TYPES],
         'selected_region':
         selected_region,
         'hypervisor_types': [x for x in settings.OS_HYPERVISOR_TYPES],
         'statuses':
         statuses_dict_to_statuses_choices(Image.IMAGE_STATUS),
         'cleanup_enabled':
         openstack_settings.auto_cleanup_images
         if openstack_settings else False,
         'cleanup_days':
         openstack_settings.auto_cleanup_number_of_days
         if openstack_settings else False,
         'cleanup_formats':
         openstack_settings.auto_cleanup_image_types
         if openstack_settings else None,
         'allowed_formats':
         getattr(django_settings, 'OS_IMAGE_UPLOAD_FORMATS', []),
         'can_create_resource':
         check_if_enough_credit(
             client=self.request.user.clients.all().first(),
             update_uptodate_credit=False,
         ),
     }
     return Response(create_options)
예제 #10
0
 def create_options(self, request, *args, **kwargs):
     selected_region, regions = get_regions(request)
     return Response({
         'regions': regions,
         'selected_region': selected_region,
     })
예제 #11
0
 def create_options(self, request):
     selected_region, regions = get_regions(request)
     return Response({'regions': regions, 'selected_region': selected_region, 'types': ZONE_TYPES})
예제 #12
0
 def create_options(self, request):
     regions = get_regions(request)
     return Response({'regions': regions})
예제 #13
0
    def create_options(self, request, *args, **kwargs):
        client = self.request.user.clients.filter(
            services__openstack_project__isnull=False).first()
        if client is None:
            raise APIConflict(detail=_(
                'No client with an OpenStack project associated found'))
        db_project = client.first_project
        conf = OSConfig()
        volume_size_increments = conf.volume_size_increments
        selected_region, regions = get_regions(request,
                                               filter_for='volumes',
                                               for_end_user=True)

        # get volume types
        volume_types = []
        for volume_type in VolumeType.objects.public().filter(
                region=selected_region):
            type_display = volume_type.description if volume_type.description else volume_type.name
            volume_types.append({
                'name':
                volume_type.name,
                'type_display':
                type_display,
                'sizeIncrement':
                self.get_size_increment(volume_size_increments,
                                        volume_type.name, selected_region)
            })

        available_images = Image.objects.get_images_for_project(
            project_id=db_project.project_id)
        available_images = available_images.filter(
            region=selected_region).distinct()

        # filter for reseller
        available_images = available_images.exclude(
            Q(visibility__in=[
                OpenStackImageVisibility.PUBLIC,
                OpenStackImageVisibility.COMMUNITY
            ]) & ~Q(reseller_resources=client.reseller_resources))

        available_volumes = Volume.objects.filter(
            project__service__client=client, region=selected_region)
        available_volumes = available_volumes.values('id', 'name', 'region')

        volume_sources = {
            'image':
            available_images.values('id', 'name', 'type', 'region',
                                    'min_disk'),
            'volume':
            available_volumes
        }

        return Response({
            'types':
            volume_types,
            'regions':
            regions,
            'sources':
            volume_sources,
            'selected_region':
            selected_region,
            'can_create_resource':
            check_if_enough_credit(
                client=self.request.user.clients.all().first(),
                update_uptodate_credit=False,
            ),
        })