コード例 #1
0
 def populate_volume_snapshot_id_choices(self, request, context):
     try:
         snapshots = cinder.volume_snapshot_list(self.request)
         snapshots = [
             self._get_volume_display_name(s) for s in snapshots if s.status == api.cinder.VOLUME_STATE_AVAILABLE
         ]
     except Exception:
         snapshots = []
         exceptions.handle(self.request, _("Unable to retrieve list of volume " "snapshots."))
     if snapshots:
         snapshots.insert(0, ("", _("Select Volume Snapshot")))
     else:
         snapshots.insert(0, ("", _("No volume snapshots available.")))
     return snapshots
コード例 #2
0
 def populate_volume_snapshot_id_choices(self, request, context):
     try:
         snapshots = cinder.volume_snapshot_list(self.request)
         snapshots = [self._get_volume_display_name(s) for s in snapshots
                      if s.status == api.cinder.VOLUME_STATE_AVAILABLE]
     except Exception:
         snapshots = []
         exceptions.handle(self.request,
                           _('Unable to retrieve list of volume '
                             'snapshots.'))
     if snapshots:
         snapshots.insert(0, ("", _("Select Volume Snapshot")))
     else:
         snapshots.insert(0, ("", _("No volume snapshots available.")))
     return snapshots
コード例 #3
0
def tenant_quota_usages(request):
    # Get our quotas and construct our usage object.
    disabled_quotas = get_disabled_quotas(request)

    usages = QuotaUsage()
    for quota in get_tenant_quota_data(request,
                                       disabled_quotas=disabled_quotas):
        usages.add_quota(quota)

    # Get our usages.
    floating_ips = network.tenant_floating_ip_list(request)
    flavors = dict([(f.id, f) for f in nova.flavor_list(request)])
    instances, has_more = nova.server_list(request)
    # Fetch deleted flavors if necessary.
    missing_flavors = [
        instance.flavor['id'] for instance in instances
        if instance.flavor['id'] not in flavors
    ]
    for missing in missing_flavors:
        if missing not in flavors:
            try:
                flavors[missing] = nova.flavor_get(request, missing)
            except Exception:
                flavors[missing] = {}
                exceptions.handle(request, ignore=True)

    usages.tally('instances', len(instances))
    usages.tally('floating_ips', len(floating_ips))

    if 'volumes' not in disabled_quotas:
        volumes = cinder.volume_list(request)
        snapshots = cinder.volume_snapshot_list(request)
        usages.tally('gigabytes', sum([int(v.size) for v in volumes]))
        usages.tally('volumes', len(volumes))
        usages.tally('snapshots', len(snapshots))

    # Sum our usage based on the flavors of the instances.
    for flavor in [flavors[instance.flavor['id']] for instance in instances]:
        usages.tally('cores', getattr(flavor, 'vcpus', None))
        usages.tally('ram', getattr(flavor, 'ram', None))

    # Initialise the tally if no instances have been launched yet
    if len(instances) == 0:
        usages.tally('cores', 0)
        usages.tally('ram', 0)

    return usages
コード例 #4
0
def tenant_quota_usages(request):
    # Get our quotas and construct our usage object.
    disabled_quotas = get_disabled_quotas(request)

    usages = QuotaUsage()
    for quota in get_tenant_quota_data(request,
                                       disabled_quotas=disabled_quotas):
        usages.add_quota(quota)

    # Get our usages.
    floating_ips = network.tenant_floating_ip_list(request)
    flavors = dict([(f.id, f) for f in nova.flavor_list(request)])
    instances, has_more = nova.server_list(request)
    # Fetch deleted flavors if necessary.
    missing_flavors = [instance.flavor['id'] for instance in instances
                       if instance.flavor['id'] not in flavors]
    for missing in missing_flavors:
        if missing not in flavors:
            try:
                flavors[missing] = nova.flavor_get(request, missing)
            except Exception:
                flavors[missing] = {}
                exceptions.handle(request, ignore=True)

    usages.tally('instances', len(instances))
    usages.tally('floating_ips', len(floating_ips))

    if 'volumes' not in disabled_quotas:
        volumes = cinder.volume_list(request)
        snapshots = cinder.volume_snapshot_list(request)
        usages.tally('gigabytes', sum([int(v.size) for v in volumes]))
        usages.tally('volumes', len(volumes))
        usages.tally('snapshots', len(snapshots))

    # Sum our usage based on the flavors of the instances.
    for flavor in [flavors[instance.flavor['id']] for instance in instances]:
        usages.tally('cores', getattr(flavor, 'vcpus', None))
        usages.tally('ram', getattr(flavor, 'ram', None))

    # Initialise the tally if no instances have been launched yet
    if len(instances) == 0:
        usages.tally('cores', 0)
        usages.tally('ram', 0)

    return usages
コード例 #5
0
    def __init__(self, request, *args, **kwargs):
        super(CreateForm, self).__init__(request, *args, **kwargs)
        volume_types = cinder.volume_type_list(request)
        self.fields["type"].choices = [("", "")] + [(type.name, type.name) for type in volume_types]

        if "snapshot_id" in request.GET:
            try:
                snapshot = self.get_snapshot(request, request.GET["snapshot_id"])
                self.fields["name"].initial = snapshot.display_name
                self.fields["size"].initial = snapshot.size
                self.fields["snapshot_source"].choices = ((snapshot.id, snapshot),)
                try:
                    # Set the volume type from the original volume
                    orig_volume = cinder.volume_get(request, snapshot.volume_id)
                    self.fields["type"].initial = orig_volume.volume_type
                except Exception:
                    pass
                self.fields["size"].help_text = _(
                    "Volume size must be equal " "to or greater than the snapshot size (%sGB)" % snapshot.size
                )
                del self.fields["image_source"]
                del self.fields["volume_source_type"]
            except Exception:
                exceptions.handle(request, _("Unable to load the specified snapshot."))
        elif "image_id" in request.GET:
            try:
                image = self.get_image(request, request.GET["image_id"])
                image.bytes = image.size
                self.fields["name"].initial = image.name
                self.fields["size"].initial = functions.bytes_to_gigabytes(image.size)
                self.fields["image_source"].choices = ((image.id, image),)
                self.fields["size"].help_text = _(
                    "Volume size must be equal " "to or greater than the image size (%s)" % filesizeformat(image.size)
                )
                del self.fields["snapshot_source"]
                del self.fields["volume_source_type"]
            except Exception:
                msg = _("Unable to load the specified image. %s")
                exceptions.handle(request, msg % request.GET["image_id"])
        else:
            source_type_choices = []

            try:
                snapshots = cinder.volume_snapshot_list(request)
                if snapshots:
                    source_type_choices.append(("snapshot_source", _("Snapshot")))
                    choices = [("", _("Choose a snapshot"))] + [(s.id, s) for s in snapshots]
                    self.fields["snapshot_source"].choices = choices
                else:
                    del self.fields["snapshot_source"]
            except Exception:
                exceptions.handle(request, _("Unable to retrieve " "volume snapshots."))

            images = utils.get_available_images(request, request.user.tenant_id)
            if images:
                source_type_choices.append(("image_source", _("Image")))
                choices = [("", _("Choose an image"))]
                for image in images:
                    image.bytes = image.size
                    image.size = functions.bytes_to_gigabytes(image.bytes)
                    choices.append((image.id, image))
                self.fields["image_source"].choices = choices
            else:
                del self.fields["image_source"]

            if source_type_choices:
                choices = [("no_source_type", _("No source, empty volume."))] + source_type_choices
                self.fields["volume_source_type"].choices = choices
            else:
                del self.fields["volume_source_type"]
コード例 #6
0
    def __init__(self, request, *args, **kwargs):
        super(CreateForm, self).__init__(request, *args, **kwargs)
        volume_types = cinder.volume_type_list(request)
        self.fields['type'].choices = [("", "")] + \
                                      [(type.name, type.name)
                                       for type in volume_types]

        if ("snapshot_id" in request.GET):
            try:
                snapshot = self.get_snapshot(request,
                                             request.GET["snapshot_id"])
                self.fields['name'].initial = snapshot.display_name
                self.fields['size'].initial = snapshot.size
                self.fields['snapshot_source'].choices = ((snapshot.id,
                                                           snapshot), )
                try:
                    # Set the volume type from the original volume
                    orig_volume = cinder.volume_get(request,
                                                    snapshot.volume_id)
                    self.fields['type'].initial = orig_volume.volume_type
                except Exception:
                    pass
                self.fields['size'].help_text = _(
                    'Volume size must be equal '
                    'to or greater than the snapshot size (%sGB)' %
                    snapshot.size)
                del self.fields['image_source']
                del self.fields['volume_source_type']
            except Exception:
                exceptions.handle(request,
                                  _('Unable to load the specified snapshot.'))
        elif ('image_id' in request.GET):
            try:
                image = self.get_image(request, request.GET["image_id"])
                image.bytes = image.size
                self.fields['name'].initial = image.name
                self.fields['size'].initial = functions.bytes_to_gigabytes(
                    image.size)
                self.fields['image_source'].choices = ((image.id, image), )
                self.fields['size'].help_text = _(
                    'Volume size must be equal '
                    'to or greater than the image size (%s)' %
                    filesizeformat(image.size))
                del self.fields['snapshot_source']
                del self.fields['volume_source_type']
            except Exception:
                msg = _('Unable to load the specified image. %s')
                exceptions.handle(request, msg % request.GET['image_id'])
        else:
            source_type_choices = []

            try:
                snapshots = cinder.volume_snapshot_list(request)
                if snapshots:
                    source_type_choices.append(
                        ("snapshot_source", _("Snapshot")))
                    choices = [('', _("Choose a snapshot"))] + \
                              [(s.id, s) for s in snapshots]
                    self.fields['snapshot_source'].choices = choices
                else:
                    del self.fields['snapshot_source']
            except Exception:
                exceptions.handle(request,
                                  _("Unable to retrieve "
                                    "volume snapshots."))

            images = utils.get_available_images(request,
                                                request.user.tenant_id)
            if images:
                source_type_choices.append(("image_source", _("Image")))
                choices = [('', _("Choose an image"))]
                for image in images:
                    image.bytes = image.size
                    image.size = functions.bytes_to_gigabytes(image.bytes)
                    choices.append((image.id, image))
                self.fields['image_source'].choices = choices
            else:
                del self.fields['image_source']

            if source_type_choices:
                choices = (
                    [('no_source_type', _("No source, empty volume."))] +
                    source_type_choices)
                self.fields['volume_source_type'].choices = choices
            else:
                del self.fields['volume_source_type']