示例#1
0
文件: forms.py 项目: mshabdiz/horizon
    def handle(self, request, data):
        try:
            # FIXME(johnp): Nova (cinderclient) currently returns a useless
            # error message when the quota is exceeded when trying to create
            # a volume, so we need to check for that scenario here before we
            # send it off to Nova to try and create.
            usages = api.tenant_quota_usages(request)

            if type(data['size']) is str:
                data['size'] = int(data['size'])

            if usages['gigabytes']['available'] < data['size']:
                error_message = _('A volume of %(req)iGB cannot be created as '
                                  'you only have %(avail)iGB of your quota '
                                  'available.')
                params = {
                    'req': data['size'],
                    'avail': usages['gigabytes']['available']
                }
                raise ValidationError(error_message % params)
            elif usages['volumes']['available'] <= 0:
                error_message = _('You are already using all of your available'
                                  ' volumes.')
                raise ValidationError(error_message)

            api.volume_create(request, data['size'], data['name'],
                              data['description'])
            message = 'Creating volume "%s"' % data['name']

            messages.info(request, message)
        except ValidationError, e:
            return self.api_error(e.messages[0])
示例#2
0
    def test_create_volume(self):
        volume = self.volumes.first()
        usage = {'gigabytes': {'available': 250}, 'volumes': {'available': 6}}
        formData = {
            'name': u'A Volume I Am Making',
            'description': u'This is a volume I am making for a test.',
            'method': u'CreateForm',
            'size': 50,
            'snapshot_source': ''
        }

        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.volume_snapshot_list(IsA(http.HttpRequest)).\
                                 AndReturn(self.volume_snapshots.list())
        api.volume_create(IsA(http.HttpRequest),
                          formData['size'],
                          formData['name'],
                          formData['description'],
                          snapshot_id=None).AndReturn(volume)

        self.mox.ReplayAll()

        url = reverse('horizon:project:volumes:create')
        res = self.client.post(url, formData)

        redirect_url = reverse('horizon:project:volumes:index')
        self.assertRedirectsNoFollow(res, redirect_url)
示例#3
0
文件: forms.py 项目: andycjw/horizon
    def handle(self, request, data):
        try:
            # FIXME(johnp): Nova (cinderclient) currently returns a useless
            # error message when the quota is exceeded when trying to create
            # a volume, so we need to check for that scenario here before we
            # send it off to Nova to try and create.
            usages = api.tenant_quota_usages(request)

            if type(data['size']) is str:
                data['size'] = int(data['size'])

            if usages['gigabytes']['available'] < data['size']:
                error_message = _('A volume of %iGB cannot be created as you'
                                  ' only have %iGB of your quota available.'
                                  % (data['size'],
                                     usages['gigabytes']['available'],))
                raise ValidationError(error_message)
            elif usages['volumes']['available'] <= 0:
                error_message = _('You are already using all of your available'
                                  ' volumes.')
                raise ValidationError(error_message)

            api.volume_create(request, data['size'], data['name'],
                              data['description'])
            message = 'Creating volume "%s"' % data['name']

            messages.info(request, message)
        except ValidationError, e:
            return self.api_error(e.messages[0])
示例#4
0
文件: forms.py 项目: rbumg/horizon
    def handle(self, request, data):
        try:
            # FIXME(johnp): Nova (cinderclient) currently returns a useless
            # error message when the quota is exceeded when trying to create
            # a volume, so we need to check for that scenario here before we
            # send it off to Nova to try and create.
            usages = api.tenant_quota_usages(request)

            if type(data["size"]) is str:
                data["size"] = int(data["size"])

            if usages["gigabytes"]["available"] < data["size"]:
                error_message = _(
                    "A volume of %(req)iGB cannot be created as "
                    "you only have %(avail)iGB of your quota "
                    "available."
                )
                params = {"req": data["size"], "avail": usages["gigabytes"]["available"]}
                raise ValidationError(error_message % params)
            elif usages["volumes"]["available"] <= 0:
                error_message = _("You are already using all of your available" " volumes.")
                raise ValidationError(error_message)

            api.volume_create(request, data["size"], data["name"], data["description"])
            message = 'Creating volume "%s"' % data["name"]

            messages.info(request, message)
        except ValidationError, e:
            return self.api_error(e.messages[0])
示例#5
0
 def handle(self, request, data):
     try:
         api.volume_create(request, data['size'], data['name'],
                           data['description'])
         message = 'Creating volume "%s"' % data['name']
         messages.info(request, message)
     except:
         exceptions.handle(request, _("Unable to create volume."))
     return shortcuts.redirect("horizon:nova:instances_and_volumes:index")
示例#6
0
 def handle(self, request, data):
     try:
         api.volume_create(request, data["size"], data["name"], data["description"])
         message = 'Creating volume "%s"' % data["name"]
         LOG.info(message)
         messages.info(request, message)
     except novaclient_exceptions.ClientException, e:
         LOG.exception("ClientException in CreateVolume")
         messages.error(request, _("Error Creating Volume: %s") % e.message)
示例#7
0
 def handle(self, request, data):
     try:
         api.volume_create(request, data['size'], data['name'],
                           data['description'])
         message = 'Creating volume "%s"' % data['name']
         messages.info(request, message)
     except:
         exceptions.handle(request,
                           _("Unable to create volume."))
     return shortcuts.redirect("horizon:nova:instances_and_volumes:index")
示例#8
0
 def handle(self, request, data):
     try:
         api.volume_create(request, data['size'], data['name'],
                           data['description'])
         message = 'Creating volume "%s"' % data['name']
         LOG.info(message)
         messages.info(request, message)
     except novaclient_exceptions.ClientException, e:
         LOG.exception("ClientException in CreateVolume")
         messages.error(request, _('Error Creating Volume: %s') % e.message)
示例#9
0
    def test_create_volume_from_snapshot(self):
        volume = self.volumes.first()
        usage = {'gigabytes': {'available': 250}, 'volumes': {'available': 6}}
        snapshot = self.volume_snapshots.first()
        formData = {
            'name': u'A Volume I Am Making',
            'description': u'This is a volume I am making for a test.',
            'method': u'CreateForm',
            'size': 50,
            'snapshot_source': snapshot.id
        }

        # first call- with url param
        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.nova.volume_snapshot_get(IsA(http.HttpRequest),
                                     str(snapshot.id)).AndReturn(snapshot)
        api.volume_create(IsA(http.HttpRequest),
                          formData['size'],
                          formData['name'],
                          formData['description'],
                          snapshot_id=snapshot.id).\
                          AndReturn(volume)
        # second call- with dropdown
        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.volume_snapshot_list(IsA(http.HttpRequest)).\
                                 AndReturn(self.volume_snapshots.list())
        api.nova.volume_snapshot_get(IsA(http.HttpRequest),
                                     str(snapshot.id)).AndReturn(snapshot)
        api.volume_create(IsA(http.HttpRequest),
                          formData['size'],
                          formData['name'],
                          formData['description'],
                          snapshot_id=snapshot.id).\
                          AndReturn(volume)

        self.mox.ReplayAll()

        # get snapshot from url
        url = reverse('horizon:project:volumes:create')
        res = self.client.post(
            "?".join([url, "snapshot_id=" + str(snapshot.id)]), formData)

        redirect_url = reverse('horizon:project:volumes:index')
        self.assertRedirectsNoFollow(res, redirect_url)

        # get snapshot from dropdown list
        url = reverse('horizon:project:volumes:create')
        res = self.client.post(url, formData)

        redirect_url = reverse('horizon:project:volumes:index')
        self.assertRedirectsNoFollow(res, redirect_url)
示例#10
0
文件: tests.py 项目: MrRagga-/horizon
    def test_create_volume_from_snapshot(self):
        volume = self.volumes.first()
        usage = {'gigabytes': {'available': 250}, 'volumes': {'available': 6}}
        snapshot = self.volume_snapshots.first()
        formData = {'name': u'A Volume I Am Making',
                    'description': u'This is a volume I am making for a test.',
                    'method': u'CreateForm',
                    'size': 50, 'snapshot_source': snapshot.id}

        # first call- with url param
        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.nova.volume_snapshot_get(IsA(http.HttpRequest),
                        str(snapshot.id)).AndReturn(snapshot)
        api.volume_create(IsA(http.HttpRequest),
                          formData['size'],
                          formData['name'],
                          formData['description'],
                          snapshot_id=snapshot.id).\
                          AndReturn(volume)
        # second call- with dropdown
        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.volume_snapshot_list(IsA(http.HttpRequest)).\
                                 AndReturn(self.volume_snapshots.list())
        api.nova.volume_snapshot_get(IsA(http.HttpRequest),
                        str(snapshot.id)).AndReturn(snapshot)
        api.volume_create(IsA(http.HttpRequest),
                          formData['size'],
                          formData['name'],
                          formData['description'],
                          snapshot_id=snapshot.id).\
                          AndReturn(volume)

        self.mox.ReplayAll()

        # get snapshot from url
        url = reverse('horizon:nova:volumes:create')
        res = self.client.post("?".join([url,
                                         "snapshot_id=" + str(snapshot.id)]),
                               formData)

        redirect_url = reverse('horizon:nova:volumes:index')
        self.assertRedirectsNoFollow(res, redirect_url)

        # get snapshot from dropdown list
        url = reverse('horizon:nova:volumes:create')
        res = self.client.post(url, formData)

        redirect_url = reverse('horizon:nova:volumes:index')
        self.assertRedirectsNoFollow(res, redirect_url)
示例#11
0
文件: tests.py 项目: andycjw/horizon
    def test_create_volume(self):
        usage = {'gigabytes': {'available': 250}, 'volumes': {'available': 6}}
        formData = {'name': u'A Volume I Am Making',
                    'description': u'This is a volume I am making for a test.',
                    'method': u'CreateForm',
                    'size': 50}

        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.volume_create(IsA(http.HttpRequest),
                          formData['size'],
                          formData['name'],
                          formData['description'])

        self.mox.ReplayAll()

        url = reverse('horizon:nova:volumes:create')
        res = self.client.post(url, formData)

        redirect_url = reverse('horizon:nova:volumes:index')
        self.assertRedirectsNoFollow(res, redirect_url)
示例#12
0
    def test_create_volume_from_snapshot(self):
        volume = self.volumes.first()
        usage = {"gigabytes": {"available": 250}, "volumes": {"available": 6}}
        snapshot = self.volume_snapshots.first()
        formData = {
            "name": u"A Volume I Am Making",
            "description": u"This is a volume I am making for a test.",
            "method": u"CreateForm",
            "size": 50,
            "snapshot_source": snapshot.id,
        }

        # first call- with url param
        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.nova.volume_snapshot_get(IsA(http.HttpRequest), str(snapshot.id)).AndReturn(snapshot)
        api.volume_create(
            IsA(http.HttpRequest), formData["size"], formData["name"], formData["description"], snapshot_id=snapshot.id
        ).AndReturn(volume)
        # second call- with dropdown
        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn(self.volume_snapshots.list())
        api.nova.volume_snapshot_get(IsA(http.HttpRequest), str(snapshot.id)).AndReturn(snapshot)
        api.volume_create(
            IsA(http.HttpRequest), formData["size"], formData["name"], formData["description"], snapshot_id=snapshot.id
        ).AndReturn(volume)

        self.mox.ReplayAll()

        # get snapshot from url
        url = reverse("horizon:nova:volumes:create")
        res = self.client.post("?".join([url, "snapshot_id=" + str(snapshot.id)]), formData)

        redirect_url = reverse("horizon:nova:volumes:index")
        self.assertRedirectsNoFollow(res, redirect_url)

        # get snapshot from dropdown list
        url = reverse("horizon:nova:volumes:create")
        res = self.client.post(url, formData)

        redirect_url = reverse("horizon:nova:volumes:index")
        self.assertRedirectsNoFollow(res, redirect_url)
示例#13
0
    def test_create_volume(self):
        volume = self.volumes.first()
        usage = {"gigabytes": {"available": 250}, "volumes": {"available": 6}}
        formData = {
            "name": u"A Volume I Am Making",
            "description": u"This is a volume I am making for a test.",
            "method": u"CreateForm",
            "size": 50,
            "snapshot_source": "",
        }

        api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn(self.volume_snapshots.list())
        api.volume_create(
            IsA(http.HttpRequest), formData["size"], formData["name"], formData["description"], snapshot_id=None
        ).AndReturn(volume)

        self.mox.ReplayAll()

        url = reverse("horizon:nova:volumes:create")
        res = self.client.post(url, formData)

        redirect_url = reverse("horizon:nova:volumes:index")
        self.assertRedirectsNoFollow(res, redirect_url)
示例#14
0
    def handle(self, request, data):
        try:
            # FIXME(johnp): cinderclient currently returns a useless
            # error message when the quota is exceeded when trying to create
            # a volume, so we need to check for that scenario here before we
            # send it off to try and create.
            usages = api.tenant_quota_usages(request)

            snapshot_id = None
            if (data.get("snapshot_source", None)):
                # Create from Snapshot
                snapshot = self.get_snapshot(request, data["snapshot_source"])
                snapshot_id = snapshot.id
                if (data['size'] < snapshot.size):
                    error_message = _('The volume size cannot be less than '
                                      'the snapshot size (%sGB)' %
                                      snapshot.size)
                    raise ValidationError(error_message)
            else:
                if type(data['size']) is str:
                    data['size'] = int(data['size'])

            if usages['gigabytes']['available'] < data['size']:
                error_message = _('A volume of %(req)iGB cannot be created as '
                                  'you only have %(avail)iGB of your quota '
                                  'available.')
                params = {
                    'req': data['size'],
                    'avail': usages['gigabytes']['available']
                }
                raise ValidationError(error_message % params)
            elif usages['volumes']['available'] <= 0:
                error_message = _('You are already using all of your available'
                                  ' volumes.')
                raise ValidationError(error_message)

            volume = api.volume_create(request,
                                       data['size'],
                                       data['name'],
                                       data['description'],
                                       snapshot_id=snapshot_id)
            message = 'Creating volume "%s"' % data['name']
            messages.info(request, message)
            return volume
        except ValidationError, e:
            return self.api_error(e.messages[0])
示例#15
0
文件: forms.py 项目: artofwar/stack
    def handle(self, request, data):
        try:
            # FIXME(johnp): Nova (cinderclient) currently returns a useless
            # error message when the quota is exceeded when trying to create
            # a volume, so we need to check for that scenario here before we
            # send it off to Nova to try and create.
            usages = api.tenant_quota_usages(request)

            snapshot_id = None
            if (data.get("snapshot_source", None)):
                # Create from Snapshot
                snapshot = self.get_snapshot(request,
                                             data["snapshot_source"])
                snapshot_id = snapshot.id
                if (data['size'] < snapshot.size):
                    error_message = _('The volume size cannot be less than '
                                      'the snapshot size (%sGB)' %
                                      snapshot.size)
                    raise ValidationError(error_message)
            else:
                if type(data['size']) is str:
                    data['size'] = int(data['size'])

            if usages['gigabytes']['available'] < data['size']:
                error_message = _('A volume of %(req)iGB cannot be created as '
                                  'you only have %(avail)iGB of your quota '
                                  'available.')
                params = {'req': data['size'],
                          'avail': usages['gigabytes']['available']}
                raise ValidationError(error_message % params)
            elif usages['volumes']['available'] <= 0:
                error_message = _('You are already using all of your available'
                                  ' volumes.')
                raise ValidationError(error_message)

            volume = api.volume_create(request,
                                       data['size'],
                                       data['name'],
                                       data['description'],
                                       snapshot_id=snapshot_id)
            message = 'Creating volume "%s"' % data['name']
            messages.info(request, message)
            return volume
        except ValidationError, e:
            return self.api_error(e.messages[0])
示例#16
0
文件: forms.py 项目: hien/horizon
    def handle(self, request, data):
        try:
            # FIXME(johnp): cinderclient currently returns a useless
            # error message when the quota is exceeded when trying to create
            # a volume, so we need to check for that scenario here before we
            # send it off to try and create.
            usages = api.tenant_quota_usages(request)

            snapshot_id = None
            if data.get("snapshot_source", None):
                # Create from Snapshot
                snapshot = self.get_snapshot(request, data["snapshot_source"])
                snapshot_id = snapshot.id
                if data["size"] < snapshot.size:
                    error_message = _("The volume size cannot be less than " "the snapshot size (%sGB)" % snapshot.size)
                    raise ValidationError(error_message)
            else:
                if type(data["size"]) is str:
                    data["size"] = int(data["size"])

            if usages["gigabytes"]["available"] < data["size"]:
                error_message = _(
                    "A volume of %(req)iGB cannot be created as "
                    "you only have %(avail)iGB of your quota "
                    "available."
                )
                params = {"req": data["size"], "avail": usages["gigabytes"]["available"]}
                raise ValidationError(error_message % params)
            elif usages["volumes"]["available"] <= 0:
                error_message = _("You are already using all of your available" " volumes.")
                raise ValidationError(error_message)

            volume = api.volume_create(
                request, data["size"], data["name"], data["description"], snapshot_id=snapshot_id
            )
            message = 'Creating volume "%s"' % data["name"]
            messages.info(request, message)
            return volume
        except ValidationError, e:
            return self.api_error(e.messages[0])