栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

基于openstack的云桌面开源框架

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于openstack的云桌面开源框架

这里主要介绍一款云桌面开源软件,openstack实现了虚拟机功能,但没有提供云终端的功能,

开源代码地址为:  https://github.com/boxiaojishu/clouddesk

此软件利用openstack上的虚拟机管理功能,通过spice协议实现了云终端直接对接openstack的能力,从而实现了云桌面的功能,这款软件只是实现了用spice直接对接spice云桌面终端的功能,并没有开源spice云桌面终端相关代码,此段代码使用python实现,这里贴一小部分代码出来,大家如果有需要的话可以直接下载代码分析。

from django.shortcuts import render,render_to_response
from django.http import HttpResponse,HttpResponseRedirect
from django.template import RequestContext
from django import forms
from novaclient import client
from deskclient.v1 import client as desk
from keystoneclient.auth.identity import v3
from keystoneclient import session
import os
import json

def get_keystone_creds():
        d = {}
        d['username'] = 'admin'
        d['password'] = 'admin'
        d['auth_url'] = 'http://192.168.0.70:35357/v3'
        d['project_name'] = 'admin'
        d['project_domain_id'] = "default"
        d['user_domain_id'] = "default"
        return d
def getNova():
        kd_creds = get_keystone_creds()
        auth = v3.Password(**kd_creds)
        sess = session.Session(auth=auth)
        nova = client.Client(2,session=sess)
        return nova

def getDesk():
    kd_creds = get_keystone_creds()
    auth = v3.Password(**kd_creds)
    sess = session.Session(auth=auth)
    deskapi=desk.Client('desk','desk','service','http://192.168.0.70:35357/v3')
    return deskapi

nova = getNova()
deskapi = getDesk()

class UserForm(forms.Form):
    username = forms.CharField(label='user',max_length=100)
    password = forms.CharField(label='password',widget=forms.PasswordInput())

def login(req):
    print req
    if req.method == 'POST':
        uf = UserForm(req.POST)
        if uf.is_valid():
            username = uf.cleaned_data['username']
            password = uf.cleaned_data['password']
            opts = {"user_name": username}
            user = deskapi.users.get_user_by_name(opts);
            if user['deskusers'][0]['password'] == password:
                virtuald = deskapi.uservirtuals.get_virtual_by_user(opts);
                virtuals = virtuald['uservirtuals']
                return render_to_response('virtuallist.html',  {'data':virtuals},context_instance=RequestContext(req))
            #user = User.objects.filter(username__exact = username,password__exact = password)
            else:
                return HttpResponseRedirect('/login/')
    else:
        uf = UserForm()
    return render_to_response('login.html',{'uf':uf},context_instance=RequestContext(req))

def logincs(req):
    print req
    if req.method == 'POST':
        body=json.loads(req.body)
        print req.body
    if req.method == 'GET':
        print "it is hello"
    print "it is :"
    print req.body
    #body = urllib.unquote(req.body)
    print body
    username=body.get('username','')
    password=body.get('password','')
    print password
    opts = {"user_name": username}
    user = deskapi.users.get_user_by_name(opts)
    print user['deskusers'][0]['password']
    if user['deskusers'][0]['password'] == password:
        virtuald = deskapi.uservirtuals.get_virtual_by_user(opts);
        virtuals = virtuald['uservirtuals']
        resp = json.dumps(virtuals)
        return HttpResponse(resp)
    else:
        return HttpResponse("")

def index(req):
    username = req.COOKIES.get('username','')
    return render_to_response('index.html' ,{'username':username})

def logout(req):
    response = HttpResponse('logout !!')
    response.delete_cookie('username')
    return response

def getspices(req):
    print req
    virtual=req.GET
    print virtual
    virtualid=virtual.get('id','')
    print virtualid
    #nova.servers.start(virtualid)
    spices = nova.servers.get_spice_console(virtualid,'spice')
    spice=spices.get('console','')
    print spice
    resp = json.dumps(spice)
    print resp
    return HttpResponse(resp)
    #nova.servers.start('086e6358-d166-47e0-96fd-8204dc4275b0')
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851311.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号