Ejemplo n.º 1
0
    def test_create_volume_from_snapshot_invalid_size(self):
        usage_limit = {'maxTotalVolumeGigabytes': 100,
                       'gigabytesUsed': 20,
                       'volumesUsed': len(self.cinder_volumes.list()),
                       'maxTotalVolumes': 6}
        snapshot = self.cinder_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': 20, 'snapshot_source': snapshot.id}

        cinder.volume_type_list(IsA(http.HttpRequest)).\
                                AndReturn(self.volume_types.list())
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
                                AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest),
                                   str(snapshot.id)).AndReturn(snapshot)
        cinder.volume_get(IsA(http.HttpRequest), snapshot.volume_id).\
                          AndReturn(self.cinder_volumes.first())

        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
                                AndReturn(usage_limit)

        self.mox.ReplayAll()

        url = reverse('horizon:project:volumes:volumes:create')
        res = self.client.post("?".join([url,
                                         "snapshot_id=" + str(snapshot.id)]),
                               formData, follow=True)
        self.assertEqual(res.redirect_chain, [])
        self.assertFormError(res, 'form', None,
                             "The volume size cannot be less than the "
                             "snapshot size (40GB)")
Ejemplo n.º 2
0
    def test_create_volume_from_snapshot_invalid_size(self):
        usage_limit = {
            "maxTotalVolumeGigabytes": 100,
            "gigabytesUsed": 20,
            "volumesUsed": len(self.cinder_volumes.list()),
            "maxTotalVolumes": 6,
        }
        snapshot = self.cinder_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": 20,
            "snapshot_source": snapshot.id,
        }

        cinder.volume_type_list(IsA(http.HttpRequest)).AndReturn(self.volume_types.list())
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest), str(snapshot.id)).AndReturn(snapshot)
        cinder.volume_get(IsA(http.HttpRequest), snapshot.volume_id).AndReturn(self.cinder_volumes.first())

        quotas.tenant_limit_usages(IsA(http.HttpRequest)).AndReturn(usage_limit)

        self.mox.ReplayAll()

        url = reverse("horizon:project:volumes:volumes:create")
        res = self.client.post("?".join([url, "snapshot_id=" + str(snapshot.id)]), formData, follow=True)
        self.assertEqual(res.redirect_chain, [])
        self.assertFormError(res, "form", None, "The volume size cannot be less than the " "snapshot size (40GB)")
Ejemplo n.º 3
0
    def test_create_volume_from_snapshot_dropdown(self):
        volume = self.volumes.first()
        usage_limit = {
            'maxTotalVolumeGigabytes': 250,
            'gigabytesUsed': 20,
            'volumesUsed': len(self.volumes.list()),
            'maxTotalVolumes': 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,
            'type': '',
            'volume_source_type': 'snapshot_source',
            'snapshot_source': snapshot.id
        }

        cinder.volume_type_list(IsA(http.HttpRequest)).\
                                AndReturn(self.volume_types.list())
        cinder.volume_snapshot_list(IsA(http.HttpRequest)).\
                                 AndReturn(self.volume_snapshots.list())
        api.glance.image_list_detailed(IsA(http.HttpRequest),
                                       filters={'is_public': True,
                                                'status': 'active'}) \
                  .AndReturn([self.images.list(), False])
        api.glance.image_list_detailed(IsA(http.HttpRequest),
                            filters={'property-owner_id': self.tenant.id,
                                     'status': 'active'}) \
                  .AndReturn([[], False])
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
                                AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest),
                                   str(snapshot.id)).AndReturn(snapshot)

        cinder.extension_supported(IsA(http.HttpRequest), 'AvailabilityZones')\
            .AndReturn(True)
        cinder.availability_zone_list(IsA(http.HttpRequest)).AndReturn(
            self.cinder_availability_zones.list())

        cinder.volume_create(IsA(http.HttpRequest),
                             formData['size'],
                             formData['name'],
                             formData['description'],
                             '',
                             metadata={},
                             snapshot_id=snapshot.id,
                             image_id=None,
                             availability_zone=None).AndReturn(volume)

        self.mox.ReplayAll()

        # 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)
Ejemplo n.º 4
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,
                    'type': '',
                    'snapshot_source': snapshot.id}

        # first call- with url param
        cinder.volume_type_list(IsA(http.HttpRequest)).\
                                AndReturn(self.volume_types.list())
        quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        cinder.volume_snapshot_get(IsA(http.HttpRequest),
                                   str(snapshot.id)).AndReturn(snapshot)
        cinder.volume_get(IsA(http.HttpRequest), snapshot.volume_id).\
                          AndReturn(self.volumes.first())
        cinder.volume_create(IsA(http.HttpRequest),
                             formData['size'],
                             formData['name'],
                             formData['description'],
                             '',
                             snapshot_id=snapshot.id).\
                             AndReturn(volume)
        # second call- with dropdown
        cinder.volume_type_list(IsA(http.HttpRequest)).\
                                AndReturn(self.volume_types.list())
        quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(usage)
        cinder.volume_snapshot_list(IsA(http.HttpRequest)).\
                                 AndReturn(self.volume_snapshots.list())
        cinder.volume_snapshot_get(IsA(http.HttpRequest),
                                   str(snapshot.id)).AndReturn(snapshot)
        cinder.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)
Ejemplo n.º 5
0
    def test_create_volume_from_snapshot_dropdown(self):
        volume = self.cinder_volumes.first()
        usage_limit = {'maxTotalVolumeGigabytes': 250,
                       'gigabytesUsed': 20,
                       'volumesUsed': len(self.cinder_volumes.list()),
                       'maxTotalVolumes': 6}
        snapshot = self.cinder_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,
                    'type': '',
                    'volume_source_type': 'snapshot_source',
                    'snapshot_source': snapshot.id}

        cinder.volume_type_list(IsA(http.HttpRequest)).\
                                AndReturn(self.volume_types.list())
        cinder.volume_snapshot_list(IsA(http.HttpRequest)).\
                                 AndReturn(self.cinder_volume_snapshots.list())
        api.glance.image_list_detailed(IsA(http.HttpRequest),
                                       filters={'is_public': True,
                                                'status': 'active'}) \
                  .AndReturn([self.images.list(), False])
        api.glance.image_list_detailed(IsA(http.HttpRequest),
                            filters={'property-owner_id': self.tenant.id,
                                     'status': 'active'}) \
                  .AndReturn([[], False])
        cinder.volume_list(IsA(
            http.HttpRequest)).AndReturn(self.cinder_volumes.list())
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
                                AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest),
                                   str(snapshot.id)).AndReturn(snapshot)

        cinder.extension_supported(IsA(http.HttpRequest), 'AvailabilityZones')\
            .AndReturn(True)
        cinder.availability_zone_list(IsA(http.HttpRequest)).AndReturn(
            self.cinder_availability_zones.list())

        cinder.volume_create(IsA(http.HttpRequest),
                             formData['size'],
                             formData['name'],
                             formData['description'],
                             '',
                             metadata={},
                             snapshot_id=snapshot.id,
                             image_id=None,
                             availability_zone=None,
                             source_volid=None).AndReturn(volume)

        self.mox.ReplayAll()

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

        redirect_url = VOLUME_VOLUMES_TAB_URL
        self.assertRedirectsNoFollow(res, redirect_url)
Ejemplo n.º 6
0
    def test_create_volume_from_snapshot_dropdown(self):
        volume = self.cinder_volumes.first()
        usage_limit = {
            "maxTotalVolumeGigabytes": 250,
            "gigabytesUsed": 20,
            "volumesUsed": len(self.cinder_volumes.list()),
            "maxTotalVolumes": 6,
        }
        snapshot = self.cinder_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,
            "type": "",
            "volume_source_type": "snapshot_source",
            "snapshot_source": snapshot.id,
        }

        cinder.volume_type_list(IsA(http.HttpRequest)).AndReturn(self.volume_types.list())
        cinder.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn(self.cinder_volume_snapshots.list())
        api.glance.image_list_detailed(
            IsA(http.HttpRequest), filters={"is_public": True, "status": "active"}
        ).AndReturn([self.images.list(), False, False])
        api.glance.image_list_detailed(
            IsA(http.HttpRequest), filters={"property-owner_id": self.tenant.id, "status": "active"}
        ).AndReturn([[], False, False])
        cinder.volume_list(IsA(http.HttpRequest)).AndReturn(self.cinder_volumes.list())
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest), str(snapshot.id)).AndReturn(snapshot)

        cinder.extension_supported(IsA(http.HttpRequest), "AvailabilityZones").AndReturn(True)
        cinder.availability_zone_list(IsA(http.HttpRequest)).AndReturn(self.cinder_availability_zones.list())

        cinder.volume_create(
            IsA(http.HttpRequest),
            formData["size"],
            formData["name"],
            formData["description"],
            "",
            metadata={},
            snapshot_id=snapshot.id,
            image_id=None,
            availability_zone=None,
            source_volid=None,
        ).AndReturn(volume)

        self.mox.ReplayAll()

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

        redirect_url = VOLUME_VOLUMES_TAB_URL
        self.assertRedirectsNoFollow(res, redirect_url)
Ejemplo n.º 7
0
    def test_update_volume_status_get(self):
        snapshot = self.cinder_volume_snapshots.first()
        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id). \
            AndReturn(snapshot)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:snapshots:update_status',
                      args=[snapshot.id])
        res = self.client.get(url)
        status_option = "<option value=\"%s\"></option>" % snapshot.status
        self.assertNotContains(res, status_option)
Ejemplo n.º 8
0
    def test_update_volume_status_get(self):
        snapshot = self.cinder_volume_snapshots.first()
        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id). \
            AndReturn(snapshot)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:snapshots:update_status',
                      args=[snapshot.id])
        res = self.client.get(url)
        status_option = "<option value=\"%s\"></option>" % snapshot.status
        self.assertNotContains(res, status_option)
Ejemplo n.º 9
0
    def test_create_volume_from_snapshot(self):
        volume = self.volumes.first()
        usage_limit = {
            'maxTotalVolumeGigabytes': 250,
            'gigabytesUsed': 20,
            'volumesUsed': len(self.volumes.list()),
            'maxTotalVolumes': 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,
            'type': '',
            'snapshot_source': snapshot.id
        }

        cinder.volume_type_list(IsA(http.HttpRequest)).\
                                AndReturn(self.volume_types.list())
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
                                AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest),
                                   str(snapshot.id)).AndReturn(snapshot)
        cinder.volume_get(IsA(http.HttpRequest), snapshot.volume_id).\
                          AndReturn(self.volumes.first())

        cinder.extension_supported(IsA(http.HttpRequest), 'AvailabilityZones')\
            .AndReturn(True)
        cinder.availability_zone_list(IsA(http.HttpRequest)).AndReturn(
            self.cinder_availability_zones.list())

        cinder.volume_create(IsA(http.HttpRequest),
                             formData['size'],
                             formData['name'],
                             formData['description'],
                             '',
                             metadata={},
                             snapshot_id=snapshot.id,
                             image_id=None,
                             availability_zone=None).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)
Ejemplo n.º 10
0
    def test_get_volume_snapshot_details_with_snapshot_exception(self):
        # Test to verify redirect if get volume snapshot fails
        snapshot = self.cinder_volume_snapshots.first()

        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id).\
            AndRaise(self.exceptions.cinder)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:snapshots:detail', args=[snapshot.id])
        res = self.client.get(url)

        self.assertNoFormErrors(res)
        self.assertMessageCount(error=1)
        self.assertRedirectsNoFollow(res, reverse(INDEX_URL))
Ejemplo n.º 11
0
    def test_update_snapshot_status(self):
        snapshot = self.cinder_volume_snapshots.first()
        state = 'error'

        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id) \
            .AndReturn(snapshot)
        cinder.volume_snapshot_reset_state(IsA(http.HttpRequest), snapshot.id,
                                           state)
        self.mox.ReplayAll()

        formData = {'status': state}
        url = reverse('horizon:admin:snapshots:update_status',
                      args=(snapshot.id, ))
        res = self.client.post(url, formData)
        self.assertNoFormErrors(res)
Ejemplo n.º 12
0
    def test_update_snapshot_status(self):
        snapshot = self.cinder_volume_snapshots.first()
        state = 'error'

        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id) \
            .AndReturn(snapshot)
        cinder.volume_snapshot_reset_state(IsA(http.HttpRequest),
                                           snapshot.id,
                                           state)
        self.mox.ReplayAll()

        formData = {'status': state}
        url = reverse('horizon:admin:volumes:snapshots:update_status',
                      args=(snapshot.id,))
        res = self.client.post(url, formData)
        self.assertNoFormErrors(res)
Ejemplo n.º 13
0
    def test_get_volume_snapshot_details(self):
        volume = self.cinder_volumes.first()
        snapshot = self.cinder_volume_snapshots.first()

        cinder.volume_get(IsA(http.HttpRequest), volume.id). \
            AndReturn(volume)
        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id). \
            AndReturn(snapshot)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:snapshots:detail', args=[snapshot.id])
        res = self.client.get(url)

        self.assertTemplateUsed(res, 'horizon/common/_detail.html')
        self.assertEqual(res.context['snapshot'].id, snapshot.id)
Ejemplo n.º 14
0
    def test_get_volume_snapshot_details_with_snapshot_exception(self):
        # Test to verify redirect if get volume snapshot fails
        snapshot = self.cinder_volume_snapshots.first()

        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id).\
            AndRaise(self.exceptions.cinder)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:snapshots:detail',
                      args=[snapshot.id])
        res = self.client.get(url)

        self.assertNoFormErrors(res)
        self.assertMessageCount(error=1)
        self.assertRedirectsNoFollow(res, reverse(INDEX_URL))
Ejemplo n.º 15
0
    def test_create_volume_from_snapshot(self):
        volume = self.volumes.first()
        usage_limit = {'maxTotalVolumeGigabytes': 250,
                       'gigabytesUsed': 20,
                       'volumesUsed': len(self.volumes.list()),
                       'maxTotalVolumes': 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,
                    'type': '',
                    'snapshot_source': snapshot.id}

        cinder.volume_type_list(IsA(http.HttpRequest)).\
                                AndReturn(self.volume_types.list())
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
                                AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest),
                                   str(snapshot.id)).AndReturn(snapshot)
        cinder.volume_get(IsA(http.HttpRequest), snapshot.volume_id).\
                          AndReturn(self.volumes.first())

        cinder.extension_supported(IsA(http.HttpRequest), 'AvailabilityZones')\
            .AndReturn(True)
        cinder.availability_zone_list(IsA(http.HttpRequest)).AndReturn(
            self.cinder_availability_zones.list())

        cinder.volume_create(IsA(http.HttpRequest),
                             formData['size'],
                             formData['name'],
                             formData['description'],
                             '',
                             metadata={},
                             snapshot_id=snapshot.id,
                             image_id=None,
                             availability_zone=None).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)
Ejemplo n.º 16
0
    def test_get_volume_snapshot_details(self):
        volume = self.cinder_volumes.first()
        snapshot = self.cinder_volume_snapshots.first()

        cinder.volume_get(IsA(http.HttpRequest), volume.id). \
            AndReturn(volume)
        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id). \
            AndReturn(snapshot)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:snapshots:detail',
                      args=[snapshot.id])
        res = self.client.get(url)

        self.assertTemplateUsed(res, 'horizon/common/_detail.html')
        self.assertEqual(res.context['snapshot'].id, snapshot.id)
Ejemplo n.º 17
0
 def get_data(self, request, snapshot_id):
     snapshot = cinder.volume_snapshot_get(request, snapshot_id)
     snapshot._volume = cinder.volume_get(request, snapshot.volume_id)
     if getattr(snapshot, 'group_snapshot_id', None):
         snapshot.group_snapshot = cinder.group_snapshot_get(
             request, snapshot.group_snapshot_id)
     else:
         snapshot.group_snapshot = None
     return snapshot
Ejemplo n.º 18
0
 def get_data(self, request, snapshot_id):
     snapshot = cinder.volume_snapshot_get(request, snapshot_id)
     snapshot._volume = cinder.volume_get(request, snapshot.volume_id)
     if getattr(snapshot, 'group_snapshot_id', None):
         snapshot.group_snapshot = cinder.group_snapshot_get(
             request, snapshot.group_snapshot_id)
     else:
         snapshot.group_snapshot = None
     return snapshot
Ejemplo n.º 19
0
 def get_object(self):
     snap_id = self.kwargs['snapshot_id']
     try:
         self._object = cinder.volume_snapshot_get(self.request, snap_id)
     except Exception:
         msg = _('Unable to retrieve volume snapshot.')
         url = reverse('horizon:project:snapshots:index')
         exceptions.handle(self.request, msg, redirect=url)
     return self._object
Ejemplo n.º 20
0
 def get_object(self):
     snap_id = self.kwargs['snapshot_id']
     try:
         self._object = cinder.volume_snapshot_get(self.request, snap_id)
     except Exception:
         exceptions.handle(self.request,
                           _('Unable to retrieve volume snapshot.'),
                           redirect=self.success_url)
     return self._object
Ejemplo n.º 21
0
 def get_data(self):
     try:
         snapshot_id = self.kwargs['snapshot_id']
         snapshot = cinder.volume_snapshot_get(self.request, snapshot_id)
     except Exception:
         redirect = reverse('horizon:project:volumes:index')
         exceptions.handle(self.request,
                           _('Unable to retrieve snapshot details.'),
                           redirect=redirect)
     return snapshot
Ejemplo n.º 22
0
 def get_object(self):
     snap_id = self.kwargs['snapshot_id']
     try:
         self._object = cinder.volume_snapshot_get(self.request,
                                                   snap_id)
     except Exception:
         msg = _('Unable to retrieve volume snapshot.')
         url = reverse('horizon:project:snapshots:index')
         exceptions.handle(self.request, msg, redirect=url)
     return self._object
Ejemplo n.º 23
0
 def get_object(self):
     snap_id = self.kwargs['snapshot_id']
     try:
         self._object = cinder.volume_snapshot_get(self.request,
                                                   snap_id)
     except Exception:
         exceptions.handle(self.request,
                           _('Unable to retrieve volume snapshot.'),
                           redirect=self.success_url)
     return self._object
Ejemplo n.º 24
0
    def test_update_snapshot(self):
        snapshot = self.cinder_volume_snapshots.first()

        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id) \
            .AndReturn(snapshot)
        cinder.volume_snapshot_update(IsA(http.HttpRequest),
                                      snapshot.id,
                                      snapshot.name,
                                      snapshot.description) \
            .AndReturn(snapshot)
        self.mox.ReplayAll()

        formData = {'method': 'UpdateSnapshotForm',
                    'name': snapshot.name,
                    'description': snapshot.description}
        url = reverse(('horizon:project:snapshots:update'),
                      args=[snapshot.id])
        res = self.client.post(url, formData)
        self.assertRedirectsNoFollow(res, INDEX_URL)
Ejemplo n.º 25
0
    def test_create_volume_from_snapshot(self):
        volume = self.cinder_volumes.first()
        usage_limit = {
            "maxTotalVolumeGigabytes": 250,
            "gigabytesUsed": 20,
            "volumesUsed": len(self.cinder_volumes.list()),
            "maxTotalVolumes": 6,
        }
        snapshot = self.cinder_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,
            "type": "",
            "snapshot_source": snapshot.id,
        }

        cinder.volume_type_list(IsA(http.HttpRequest)).AndReturn(self.volume_types.list())
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).AndReturn(usage_limit)
        cinder.volume_snapshot_get(IsA(http.HttpRequest), str(snapshot.id)).AndReturn(snapshot)
        cinder.volume_get(IsA(http.HttpRequest), snapshot.volume_id).AndReturn(self.cinder_volumes.first())

        cinder.volume_create(
            IsA(http.HttpRequest),
            formData["size"],
            formData["name"],
            formData["description"],
            "",
            metadata={},
            snapshot_id=snapshot.id,
            image_id=None,
            availability_zone=None,
            source_volid=None,
        ).AndReturn(volume)
        self.mox.ReplayAll()

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

        redirect_url = VOLUME_VOLUMES_TAB_URL
        self.assertRedirectsNoFollow(res, redirect_url)
Ejemplo n.º 26
0
 def get_data(self):
     try:
         snapshot_id = self.kwargs['snapshot_id']
         snapshot = cinder.volume_snapshot_get(self.request, snapshot_id)
         snapshot._volume = cinder.volume_get(self.request,
                                              snapshot.volume_id)
     except Exception:
         redirect = self.get_redirect_url()
         exceptions.handle(self.request,
                           _('Unable to retrieve snapshot details.'),
                           redirect=redirect)
     return snapshot
Ejemplo n.º 27
0
    def test_get_volume_snapshot_details(self):
        volume = self.cinder_volumes.first()
        snapshot = self.cinder_volume_snapshots.first()

        cinder.volume_get(IsA(http.HttpRequest), volume.id). \
            AndReturn(volume)
        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id). \
            AndReturn(snapshot)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:snapshots:detail',
                      args=[snapshot.id])
        res = self.client.get(url)

        self.assertContains(
            res, "<h2>Volume Snapshot Details: %s</h2>" % snapshot.name, 1,
            200)
        self.assertContains(res, "<dd>test snapshot</dd>", 1, 200)
        self.assertContains(res, "<dd>%s</dd>" % snapshot.id, 1, 200)
        self.assertContains(res, "<dd>Available</dd>", 1, 200)
Ejemplo n.º 28
0
    def get_data(self, request, snapshot_id):
        snapshot = cinder.volume_snapshot_get(request, snapshot_id)
        snapshot._volume = cinder.volume_get(request, snapshot.volume_id)
        snapshot.host_name = getattr(snapshot._volume, 'os-vol-host-attr:host')
        tenant_id = getattr(snapshot._volume, 'os-vol-tenant-attr:tenant_id')
        try:
            tenant = keystone.tenant_get(request, tenant_id)
            snapshot.tenant_name = getattr(tenant, "name")
        except Exception:
            msg = _('Unable to retrieve volume project information.')
            exceptions.handle(request, msg)

        return snapshot
Ejemplo n.º 29
0
 def get_data(self):
     try:
         snapshot_id = self.kwargs['snapshot_id']
         snapshot = cinder.volume_snapshot_get(self.request,
                                               snapshot_id)
         snapshot._volume = cinder.volume_get(self.request,
                                              snapshot.volume_id)
     except Exception:
         redirect = self.get_redirect_url()
         exceptions.handle(self.request,
                           _('Unable to retrieve snapshot details.'),
                           redirect=redirect)
     return snapshot
Ejemplo n.º 30
0
    def test_get_volume_snapshot_details(self):
        volume = self.cinder_volumes.first()
        snapshot = self.cinder_volume_snapshots.first()

        cinder.volume_get(IsA(http.HttpRequest), volume.id). \
            AndReturn(volume)
        cinder.volume_snapshot_get(IsA(http.HttpRequest), snapshot.id). \
            AndReturn(snapshot)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:snapshots:detail',
                      args=[snapshot.id])
        res = self.client.get(url)

        self.assertContains(res,
                            "<h1>Volume Snapshot Details: %s</h1>" %
                            snapshot.name,
                            1, 200)
        self.assertContains(res, "<dd>test snapshot</dd>", 1, 200)
        self.assertContains(res, "<dd>%s</dd>" % snapshot.id, 1, 200)
        self.assertContains(res, "<dd>Available</dd>", 1, 200)
Ejemplo n.º 31
0
    def get_data(self, request, snapshot_id):
        snapshot = cinder.volume_snapshot_get(request, snapshot_id)
        snapshot._volume = cinder.volume_get(request, snapshot.volume_id)
        snapshot.host_name = getattr(snapshot._volume, "os-vol-host-attr:host")
        tenant_id = getattr(snapshot._volume, "os-vol-tenant-attr:tenant_id")
        try:
            tenant = keystone.tenant_get(request, tenant_id)
            snapshot.tenant_name = getattr(tenant, "name")
        except Exception:
            msg = _("Unable to retrieve volume project information.")
            exceptions.handle(request, msg)

        return snapshot
Ejemplo n.º 32
0
 def get_context_data(self, request):
     snapshot_id = self.tab_group.kwargs['snapshot_id']
     try:
         snapshot = cinder.volume_snapshot_get(request, snapshot_id)
         volume = cinder.volume_get(request, snapshot.volume_id)
         volume.display_name = None
     except Exception:
         redirect = reverse('horizon:project:images_and_snapshots:index')
         exceptions.handle(self.request,
                           _('Unable to retrieve snapshot details.'),
                           redirect=redirect)
     return {'snapshot': snapshot,
             'volume': volume}
Ejemplo n.º 33
0
    def get_data(self):
        try:
            # from openstack_dashboard import policy
            # allowed = policy.check((("volume","volume:create"),),
            # self.request)
            snapshot_id = self.kwargs['snapshot_id']
            snapshot = cinder.volume_snapshot_get(self.request, snapshot_id)

            volume_id = snapshot.volume_id
            volume = cinder.volume_get(self.request, volume_id)

            LOG.info(("deep link - get keystone token for snapshot = %s") %
                     snapshot.name)

            # get volume data to build URI to SSMC
            endpoint = self.get_SSMC_endpoint(volume, snapshot)
            LOG.info(("deep-link - Session Token = %s") %
                     self.ssmc_api.get_session_key())

            if endpoint:
                ref = urlparse(self.ssmc_api.get_volume_ref())

                if volume.consistencygroup_id:
                    # show vvset for cgroup and let user navigate to snapshot
                    url = "0;url=" + endpoint + \
                          '#/vv-sets/show/overview/r' + \
                          ref.path + '?sessionToken=' + \
                          self.ssmc_api.get_session_key()
                else:
                    # show snapshot view
                    url = "0;url=" + endpoint + \
                          '#/virtual-volumes/show/capacity/r' + \
                          ref.path + '?sessionToken=' + \
                          self.ssmc_api.get_session_key()

                # USE if we want user to log in every time
                # self.logout_SSMC_session()
                LOG.info(("deep-link - SSMC URL = %s") % url)
                return snapshot, url

        except ValueError as err:
            url = reverse('horizon:admin:volumes:volumes_tab')
            exceptions.handle(self.request,
                              err.message,
                              redirect=url)
        except Exception as err:
            LOG.info(("deep-link error = %s") % err.message)
            exceptions.handle(self.request,
                              _('Unable to retrieve volume details.'),
                              redirect=self.success_url)
Ejemplo n.º 34
0
 def get_data(self, request, backup_id):
     backup = cinder.volume_backup_get(request, backup_id)
     try:
         backup.volume = cinder.volume_get(request, backup.volume_id)
     except Exception:
         pass
     if backup.snapshot_id is not None:
         try:
             backup.snapshot = cinder.volume_snapshot_get(
                 request, backup.snapshot_id)
         except Exception:
             pass
     else:
         backup.snapshot = None
     return backup
Ejemplo n.º 35
0
    def get_data(self, request, snapshot_id):
        snapshot = cinder.volume_snapshot_get(request, snapshot_id)
        snapshot._volume = cinder.volume_get(request, snapshot.volume_id)
        try:
            tenants, has_more = api.keystone.tenant_list(request)
        except Exception:
            tenants = []
            msg = _('Unable to retrieve volume project information.')

        tenant_dict = SortedDict([(t.id, t) for t in tenants])
        tenant_id = getattr(snapshot,
                            "os-extended-snapshot-attributes:project_id", None)
        tenant = tenant_dict.get(tenant_id, None)
        snapshot.tenant_name = getattr(tenant, "name", None)

        return snapshot
Ejemplo n.º 36
0
    def get_context_data(self, request):
        try:
            backup = self.tab_group.kwargs['backup']
            try:
                volume = cinder.volume_get(request, backup.volume_id)
            except Exception:
                volume = None
            try:
                if backup.snapshot_id:
                    snapshot = cinder.volume_snapshot_get(
                        request, backup.snapshot_id)
                else:
                    snapshot = None
            except Exception:
                snapshot = None

            return {'backup': backup, 'volume': volume, 'snapshot': snapshot}

        except Exception:
            redirect = reverse('horizon:project:backups:index')
            exceptions.handle(self.request,
                              _('Unable to retrieve backup details.'),
                              redirect=redirect)
Ejemplo n.º 37
0
 def get_snapshot(self, request, id):
     return cinder.volume_snapshot_get(request, id)
Ejemplo n.º 38
0
 def get_data(self, request, strategy_id):
     strategy = cinder.volume_snapshot_get(request, strategy_id)
     strategy._volume = cinder.volume_get(request, strategy_id.volume_id)
     return strategy
Ejemplo n.º 39
0
 def get_data(self, request, snapshot_id):
     snapshot = cinder.volume_snapshot_get(request, snapshot_id)
     snapshot._volume = cinder.volume_get(request, snapshot.volume_id)
     return snapshot
 def get_snapshot(self, request, id):
     return cinder.volume_snapshot_get(request, id)
Ejemplo n.º 41
0
 def get_data(self, request, snapshot_id):
     snapshot = cinder.volume_snapshot_get(request, snapshot_id)
     snapshot._volume = cinder.volume_get(request, snapshot.volume_id)
     return snapshot