mirror of
https://github.com/retspen/webvirtcloud
synced 2024-12-24 15:15:22 +00:00
commit
ad373cff7b
7 changed files with 32 additions and 181 deletions
12
README.md
12
README.md
|
@ -267,14 +267,14 @@ python manage.py migrate
|
||||||
sudo service supervisor restart
|
sudo service supervisor restart
|
||||||
```
|
```
|
||||||
### Screenshots
|
### Screenshots
|
||||||
Instance Detail:</br>
|
Instance Detail:
|
||||||
<img src="doc/images/instance.PNG" width="95%" align="center"></img>
|
<img src="doc/images/instance.PNG" width="95%" align="center"/>
|
||||||
Instance List:</br>
|
Instance List:</br>
|
||||||
<img src="doc/images/grouped.PNG" width="47%"></img>
|
<img src="doc/images/grouped.PNG" width="47%"/>
|
||||||
<img src="doc/images/nongrouped.PNG" width="51%"></img>
|
<img src="doc/images/nongrouped.PNG" width="51%"/>
|
||||||
Other: </br>
|
Other: </br>
|
||||||
<img src="doc/images/hosts.PNG" width="52%"></img>
|
<img src="doc/images/hosts.PNG" width="52%"/>
|
||||||
<img src="doc/images/log.PNG" width="47%"></img>
|
<img src="doc/images/log.PNG" width="47%"/>
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
|
|
|
@ -1398,19 +1398,21 @@
|
||||||
function update_clone_disk_name(new_vname) {
|
function update_clone_disk_name(new_vname) {
|
||||||
vname = '{{ vname }}';
|
vname = '{{ vname }}';
|
||||||
{% for disk in disks %}
|
{% for disk in disks %}
|
||||||
disk_name = '{{ disk.image }}';
|
disk_name = '{{ disk.image }}';
|
||||||
disk_dot = disk_name.split('.')
|
disk_dot = disk_name.split('.')
|
||||||
disk_dot_suffix = disk_dot[disk_dot.length-1];
|
disk_dot_suffix = disk_dot[disk_dot.length-1];
|
||||||
if (disk_name.startsWith(vname)) {
|
if (disk_name.startsWith(vname)) {
|
||||||
image = disk_name.replace(vname, new_vname);
|
image = disk_name.replace(vname, new_vname);
|
||||||
} else if (disk_name.lastIndexOf('.') > -1 && disk_dot_suffix.length <= 7) {
|
} else if (disk_name.lastIndexOf('.') > -1 && disk_dot_suffix.length <= 7) {
|
||||||
image = new_vname + "." + disk_dot_suffix
|
disk_dot.pop();
|
||||||
} else if (new_vname != disk_name) {
|
disk_name_only = disk_dot.join('-')
|
||||||
image = new_vname
|
image = new_vname + "-" + disk_name_only + "." + disk_dot_suffix
|
||||||
} else {
|
} else if (new_vname != disk_name) {
|
||||||
image = new_vname + '-clone';
|
image = new_vname
|
||||||
}
|
} else {
|
||||||
$('#disk_name-{{ disk.dev }}').val(image);
|
image = new_vname + '-clone';
|
||||||
|
}
|
||||||
|
$('#disk_name-{{ disk.dev }}').val(image);
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -469,7 +469,7 @@ def instance(request, compute_id, vname):
|
||||||
name = request.POST.get('name', '')
|
name = request.POST.get('name', '')
|
||||||
format = request.POST.get('format', default_format)
|
format = request.POST.get('format', default_format)
|
||||||
size = request.POST.get('size', 0)
|
size = request.POST.get('size', 0)
|
||||||
meta_prealloc = request.POST.get('meta_prealloc', False)
|
meta_prealloc = True if request.POST.get('meta_prealloc', False) else False
|
||||||
bus = request.POST.get('bus', default_bus)
|
bus = request.POST.get('bus', default_bus)
|
||||||
cache = request.POST.get('cache', default_cache)
|
cache = request.POST.get('cache', default_cache)
|
||||||
target = get_new_disk_dev(media, disks, bus)
|
target = get_new_disk_dev(media, disks, bus)
|
||||||
|
@ -774,7 +774,7 @@ def instance(request, compute_id, vname):
|
||||||
|
|
||||||
if request.user.is_superuser or request.user.userattributes.can_clone_instances:
|
if request.user.is_superuser or request.user.userattributes.can_clone_instances:
|
||||||
if 'clone' in request.POST:
|
if 'clone' in request.POST:
|
||||||
clone_data = {}
|
clone_data = dict()
|
||||||
clone_data['name'] = request.POST.get('name', '')
|
clone_data['name'] = request.POST.get('name', '')
|
||||||
|
|
||||||
disk_sum = sum([disk['size'] >> 30 for disk in disks])
|
disk_sum = sum([disk['size'] >> 30 for disk in disks])
|
||||||
|
|
4
static/css/bootstrap.min.css
vendored
4
static/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
6
static/js/bootstrap.min.js
vendored
6
static/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
7
static/js/jquery.js
vendored
7
static/js/jquery.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,151 +1,3 @@
|
||||||
/*!
|
/*! js-cookie v2.2.0 | MIT */
|
||||||
* JavaScript Cookie v2.1.1
|
|
||||||
* https://github.com/js-cookie/js-cookie
|
|
||||||
*
|
|
||||||
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
|
|
||||||
* Released under the MIT license
|
|
||||||
*/
|
|
||||||
;(function (factory) {
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
define(factory);
|
|
||||||
} else if (typeof exports === 'object') {
|
|
||||||
module.exports = factory();
|
|
||||||
} else {
|
|
||||||
var OldCookies = window.Cookies;
|
|
||||||
var api = window.Cookies = factory();
|
|
||||||
api.noConflict = function () {
|
|
||||||
window.Cookies = OldCookies;
|
|
||||||
return api;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}(function () {
|
|
||||||
function extend () {
|
|
||||||
var i = 0;
|
|
||||||
var result = {};
|
|
||||||
for (; i < arguments.length; i++) {
|
|
||||||
var attributes = arguments[ i ];
|
|
||||||
for (var key in attributes) {
|
|
||||||
result[key] = attributes[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function init (converter) {
|
!function(e){var n=!1;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var o=window.Cookies,t=window.Cookies=e();t.noConflict=function(){return window.Cookies=o,t}}}(function(){function e(){for(var e=0,n={};e<arguments.length;e++){var o=arguments[e];for(var t in o)n[t]=o[t]}return n}function n(o){function t(n,r,i){var c;if("undefined"!=typeof document){if(arguments.length>1){if("number"==typeof(i=e({path:"/"},t.defaults,i)).expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*i.expires),i.expires=a}i.expires=i.expires?i.expires.toUTCString():"";try{c=JSON.stringify(r),/^[\{\[]/.test(c)&&(r=c)}catch(e){}r=o.write?o.write(r,n):encodeURIComponent(r+"").replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=(n=(n=encodeURIComponent(n+"")).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape);var s="";for(var f in i)i[f]&&(s+="; "+f,!0!==i[f]&&(s+="="+i[f]));return document.cookie=n+"="+r+s}n||(c={});for(var p=document.cookie?document.cookie.split("; "):[],d=/(%[0-9A-Z]{2})+/g,u=0;u<p.length;u++){var l=p[u].split("="),C=l.slice(1).join("=");this.json||'"'!==C.charAt(0)||(C=C.slice(1,-1));try{var m=l[0].replace(d,decodeURIComponent);if(C=o.read?o.read(C,m):o(C,m)||C.replace(d,decodeURIComponent),this.json)try{C=JSON.parse(C)}catch(e){}if(n===m){c=C;break}n||(c[m]=C)}catch(e){}}return c}}return t.set=t,t.get=function(e){return t.call(t,e)},t.getJSON=function(){return t.apply({json:!0},[].slice.call(arguments))},t.defaults={},t.remove=function(n,o){t(n,"",e(o,{expires:-1}))},t.withConverter=n,t}return n(function(){})});
|
||||||
function api (key, value, attributes) {
|
|
||||||
var result;
|
|
||||||
if (typeof document === 'undefined') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write
|
|
||||||
|
|
||||||
if (arguments.length > 1) {
|
|
||||||
attributes = extend({
|
|
||||||
path: '/'
|
|
||||||
}, api.defaults, attributes);
|
|
||||||
|
|
||||||
if (typeof attributes.expires === 'number') {
|
|
||||||
var expires = new Date();
|
|
||||||
expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
|
|
||||||
attributes.expires = expires;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
result = JSON.stringify(value);
|
|
||||||
if (/^[\{\[]/.test(result)) {
|
|
||||||
value = result;
|
|
||||||
}
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
if (!converter.write) {
|
|
||||||
value = encodeURIComponent(String(value))
|
|
||||||
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
|
|
||||||
} else {
|
|
||||||
value = converter.write(value, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
key = encodeURIComponent(String(key));
|
|
||||||
key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
|
|
||||||
key = key.replace(/[\(\)]/g, escape);
|
|
||||||
|
|
||||||
return (document.cookie = [
|
|
||||||
key, '=', value,
|
|
||||||
attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE
|
|
||||||
attributes.path && '; path=' + attributes.path,
|
|
||||||
attributes.domain && '; domain=' + attributes.domain,
|
|
||||||
attributes.secure ? '; secure' : ''
|
|
||||||
].join(''));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read
|
|
||||||
|
|
||||||
if (!key) {
|
|
||||||
result = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
// To prevent the for loop in the first place assign an empty array
|
|
||||||
// in case there are no cookies at all. Also prevents odd result when
|
|
||||||
// calling "get()"
|
|
||||||
var cookies = document.cookie ? document.cookie.split('; ') : [];
|
|
||||||
var rdecode = /(%[0-9A-Z]{2})+/g;
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
for (; i < cookies.length; i++) {
|
|
||||||
var parts = cookies[i].split('=');
|
|
||||||
var name = parts[0].replace(rdecode, decodeURIComponent);
|
|
||||||
var cookie = parts.slice(1).join('=');
|
|
||||||
|
|
||||||
if (cookie.charAt(0) === '"') {
|
|
||||||
cookie = cookie.slice(1, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
cookie = converter.read ?
|
|
||||||
converter.read(cookie, name) : converter(cookie, name) ||
|
|
||||||
cookie.replace(rdecode, decodeURIComponent);
|
|
||||||
|
|
||||||
if (this.json) {
|
|
||||||
try {
|
|
||||||
cookie = JSON.parse(cookie);
|
|
||||||
} catch (e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key === name) {
|
|
||||||
result = cookie;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!key) {
|
|
||||||
result[name] = cookie;
|
|
||||||
}
|
|
||||||
} catch (e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
api.set = api;
|
|
||||||
api.get = function (key) {
|
|
||||||
return api(key);
|
|
||||||
};
|
|
||||||
api.getJSON = function () {
|
|
||||||
return api.apply({
|
|
||||||
json: true
|
|
||||||
}, [].slice.call(arguments));
|
|
||||||
};
|
|
||||||
api.defaults = {};
|
|
||||||
|
|
||||||
api.remove = function (key, attributes) {
|
|
||||||
api(key, '', extend(attributes, {
|
|
||||||
expires: -1
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
api.withConverter = init;
|
|
||||||
|
|
||||||
return api;
|
|
||||||
}
|
|
||||||
|
|
||||||
return init(function () {});
|
|
||||||
}));
|
|
Loading…
Reference in a new issue