예제 #1
0
def usage(request):
    (date_start, date_end, datetime_start, datetime_end) = _get_start_and_end_date(request)
    service_list = []
    usage_list = []
    max_vcpus = max_gigabytes = 0

    if date_start > _current_month():
        messages.error(request, 'No data for the selected period')
        date_end = date_start
        datetime_end = datetime_start
    else:
        try:
            service_list = api.admin_api(request).services.list()
        except api_exceptions.ApiException, e:
            messages.error(request, 'Unable to get service info: %s' % e.message)

        for service in service_list:
            if service.type == 'nova-compute':
                max_vcpus += service.stats['max_vcpus']
                max_gigabytes += service.stats['max_gigabytes']

        try:
            usage_list = api.extras_api(request).usage.list(datetime_start, datetime_end)
        except api_exceptions.ApiException, e:
            messages.error(request, 'Unable to get usage info: %s' % e.message)
예제 #2
0
 def keynamelist():
     try:
         fl = api.extras_api(request).keypairs.list()
         sel = [(f.key_name, f.key_name) for f in fl]
         return sel
     except:
         return []
예제 #3
0
def index(request):
    for f in (TerminateInstance, RebootInstance):
        _, handled = f.maybe_handle(request)
        if handled:
            return handled

    instances = []
    try:
        image_dict = api.get_image_cache(request)
        instances = api.extras_api(request).servers.list()
        for instance in instances:
            # FIXME - ported this over, but it is hacky
            instance._info['attrs']['image_name'] =\
               image_dict.get(int(instance.attrs['image_id']),{}).get('name')
    except Exception as e:
        messages.error(request, 'Unable to get instance list: %s' % e.message)

    # We don't have any way of showing errors for these, so don't bother
    # trying to reuse the forms from above
    terminate_form = TerminateInstance()
    reboot_form = RebootInstance()

    return render_to_response('syspanel_instances.html', {
        'instances': instances,
        'terminate_form': terminate_form,
        'reboot_form': reboot_form,
    }, context_instance=template.RequestContext(request))
예제 #4
0
 def handle(self, request, data):
     try:
         keypair = api.extras_api(request).keypairs.delete(
                                           data['keypair_id'])
         messages.info(request, 'Successfully deleted keypair: %s' \
                                 % data['keypair_id'])
     except api_exceptions.ApiException, e:
         messages.error(request, 'Error deleting keypair: %s' % e.message)
예제 #5
0
    def handle(self, request, data):
        image_id = data["image_id"]
        try:
            image = api.compute_api(request).images.get(image_id)
            flavor = api.compute_api(request).flavors.get(data["flavor"])
            api.extras_api(request).servers.create(
                data["name"], image, flavor, user_data=data["user_data"], key_name=data.get("key_name")
            )

            messages.success(
                request,
                "Instance was successfully\
                                       launched.",
            )
            return shortcuts.redirect(request.build_absolute_uri())

        except api_exceptions.ApiException, e:
            messages.error(request, "Unable to launch instance: %s" % e.message)
예제 #6
0
    def flavorlist():
        try:
            fl = api.extras_api(request).flavors.list()

            # TODO add vcpu count to flavors
            sel = [(f.id, "%s (%svcpu / %sGB Disk / %sMB Ram )" % (f.name, f.vcpus, f.disk, f.ram)) for f in fl]
            return sorted(sel)
        except:
            return [(1, "m1.tiny")]
예제 #7
0
def vnc(request, tenant_id, instance_id):
    try:
        console = api.extras_api(request).consoles.create(instance_id, 'vnc')
        return redirect(console.output)
    except api_exceptions.ApiException, e:
        messages.error(request,
                   'Unable to get vnc console for instance %s: %s' %
                   (instance_id, e.message))
        return redirect('dash_instances', tenant_id)
예제 #8
0
def index(request, tenant_id):
    delete_form, handled = DeleteKeypair.maybe_handle(request)
    if handled:
        return handled

    try:
        keypairs = api.extras_api(request).keypairs.list()
    except api_exceptions.ApiException, e:
        keypairs = []
        messages.error(request, 'Error featching keypairs: %s' % e.message)
예제 #9
0
 def handle(self, request, data):
     try:
         keypair = api.extras_api(request).keypairs.create(data['name'])
         response = http.HttpResponse(mimetype='application/binary')
         response['Content-Disposition'] = \
             'attachment; filename=%s.pem' % \
             keypair.key_name
         response.write(keypair.private_key)
         return response
     except api_exceptions.ApiException, e:
         messages.error(request, 'Error Creating Keypair: %s' % e.message)
         return shortcuts.redirect(request.build_absolute_uri())
예제 #10
0
def console(request, tenant_id, instance_id):
    try:
        console = api.extras_api(request).consoles.create(instance_id)
        response = http.HttpResponse(mimetype='text/plain')
        response.write(console.output)
        response.flush()
        return response
    except api_exceptions.ApiException, e:
        messages.error(request,
                   'Unable to get log for instance %s: %s' %
                   (instance_id, e.message))
        return redirect('dash_instances', tenant_id)
예제 #11
0
    def test_get_extras_api(self):
        self.mox.StubOutClassWithMocks(OSExtras, "Extras")
        OSExtras.Extras(auth_token=TEST_TOKEN, management_url=TEST_URL)

        self.mox.StubOutWithMock(api, "url_for")
        api.url_for(IsA(http.HttpRequest), "nova").AndReturn(TEST_URL)
        api.url_for(IsA(http.HttpRequest), "nova").AndReturn(TEST_URL)

        self.mox.ReplayAll()

        self.assertIsNotNone(api.extras_api(self.request))

        self.mox.VerifyAll()
예제 #12
0
def usage(request, tenant_id=None):
    today = datetime.date.today()
    date_start = datetime.date(today.year, today.month, 1)
    datetime_start = datetime.datetime.combine(date_start, datetime.time())
    datetime_end = datetime.datetime.utcnow()

    usage = {}
    if not tenant_id:
        tenant_id = request.user.tenant

    try:
        usage = api.extras_api(request).usage.get(tenant_id,
                                                  datetime_start, datetime_end)
    except api_exceptions.ApiException, e:
        messages.error(request, 'Unable to get usage info: %s' % e.message)
예제 #13
0
 def stub_extras_api(self, count=1):
     self.mox.StubOutWithMock(api, "extras_api")
     extras_api = self.mox.CreateMock(OSExtras.Extras)
     for i in range(count):
         api.extras_api(IsA(http.HttpRequest)).AndReturn(extras_api)
     return extras_api