Revision 7ac49c2e
b/snf-cyclades-app/synnefo/ui/static/snf/js/models.js | ||
---|---|---|
385 | 385 |
return parseInt(this.get("disk") * 1000) |
386 | 386 |
}, |
387 | 387 |
|
388 |
get_ram_size: function() { |
|
389 |
return parseInt(this.get("ram")) |
|
390 |
}, |
|
391 |
|
|
388 | 392 |
get_disk_template_info: function() { |
389 | 393 |
var info = snf.config.flavors_disk_templates_info[this.get("disk_template")]; |
390 | 394 |
if (!info) { |
391 | 395 |
info = { name: this.get("disk_template"), description:'' }; |
392 | 396 |
} |
393 | 397 |
return info |
394 |
} |
|
398 |
}, |
|
399 |
|
|
400 |
disk_to_bytes: function() { |
|
401 |
return parseInt(this.get("disk")) * 1024 * 1024 * 1024; |
|
402 |
}, |
|
403 |
|
|
404 |
ram_to_bytes: function() { |
|
405 |
return parseInt(this.get("ram")) * 1024 * 1024; |
|
406 |
}, |
|
395 | 407 |
|
396 | 408 |
}); |
397 | 409 |
|
... | ... | |
1876 | 1888 |
return flv.get("disk") * flv.get("cpu") * flv.get("ram"); |
1877 | 1889 |
}, |
1878 | 1890 |
|
1891 |
unavailable_values_for_quotas: function(quotas, flavors) { |
|
1892 |
var flavors = flavors || this.active(); |
|
1893 |
var index = {cpu:[], disk:[], ram:[]}; |
|
1894 |
|
|
1895 |
_.each(flavors, function(el) { |
|
1896 |
|
|
1897 |
var disk_available = quotas['disk']; |
|
1898 |
var disk_size = el.get_disk_size(); |
|
1899 |
if (index.disk.indexOf(disk_size) == -1) { |
|
1900 |
var disk = el.disk_to_bytes(); |
|
1901 |
if (disk > disk_available) { |
|
1902 |
index.disk.push(disk_size); |
|
1903 |
} |
|
1904 |
} |
|
1905 |
|
|
1906 |
var ram_available = quotas['ram']; |
|
1907 |
var ram_size = el.get_ram_size(); |
|
1908 |
if (index.ram.indexOf(disk_size) == -1) { |
|
1909 |
var ram = el.ram_to_bytes(); |
|
1910 |
if (ram > ram_available) { |
|
1911 |
index.ram.push(el.get('ram')) |
|
1912 |
} |
|
1913 |
} |
|
1914 |
|
|
1915 |
var cpu = el.get('cpu'); |
|
1916 |
var cpu_available = quotas['cpu']; |
|
1917 |
if (index.ram.indexOf(cpu) == -1) { |
|
1918 |
if (cpu > cpu_available) { |
|
1919 |
index.cpu.push(el.get('cpu')) |
|
1920 |
} |
|
1921 |
} |
|
1922 |
}); |
|
1923 |
return index; |
|
1924 |
}, |
|
1925 |
|
|
1879 | 1926 |
unavailable_values_for_image: function(img, flavors) { |
1880 | 1927 |
var flavors = flavors || this.active(); |
1881 | 1928 |
var size = img.get_size(); |
b/snf-cyclades-app/synnefo/ui/static/snf/js/quota.js | ||
---|---|---|
69 | 69 |
snf.quota.Quota = function(defaultns) { |
70 | 70 |
if (defaultns == undefined) { defaultns = "" } |
71 | 71 |
this.ns = defaultns; |
72 |
this.data = {}; |
|
72 | 73 |
} |
73 | 74 |
|
74 | 75 |
_.extend(snf.quota.Quota.prototype, bb.Events, { |
... | ... | |
81 | 82 |
} else { |
82 | 83 |
this.data[q.name] = q; |
83 | 84 |
} |
85 |
|
|
84 | 86 |
q.maxValue = parseInt(q.maxValue); |
85 | 87 |
q.currValue = parseInt(q.currValue); |
86 | 88 |
this.update_exceeded(q.name, true); |
b/snf-cyclades-app/synnefo/ui/static/snf/js/ui/web/ui_create_view.js | ||
---|---|---|
657 | 657 |
}, |
658 | 658 |
|
659 | 659 |
update_unavailable_values: function() { |
660 |
if (!this.current_image) { this.unavailable_values = {disk:[], ram:[], cpu:[]}; return }; |
|
661 |
this.unavailable_values = storage.flavors.unavailable_values_for_image(this.current_image); |
|
660 |
|
|
661 |
var unavailable = {disk:[], ram:[], cpu:[]} |
|
662 |
var user_excluded = {disk:[], ram:[], cpu:[]} |
|
663 |
var image_excluded = {disk:[], ram:[], cpu:[]} |
|
664 |
|
|
665 |
if (this.current_image) { |
|
666 |
image_excluded = storage.flavors.unavailable_values_for_image(this.current_image); |
|
667 |
} |
|
668 |
|
|
669 |
if (snf.user.quota) { |
|
670 |
quotas = this.get_vm_params_quotas(); |
|
671 |
user_excluded = storage.flavors.unavailable_values_for_quotas(quotas); |
|
672 |
} |
|
673 |
|
|
674 |
unavailable.disk = user_excluded.disk.concat(image_excluded.disk); |
|
675 |
unavailable.ram = user_excluded.ram.concat(image_excluded.ram); |
|
676 |
unavailable.cpu = user_excluded.cpu.concat(image_excluded.cpu); |
|
677 |
|
|
678 |
this.unavailable_values = unavailable; |
|
662 | 679 |
}, |
663 | 680 |
|
681 |
get_vm_params_quotas: function() { |
|
682 |
var quota = { |
|
683 |
'ram': snf.user.quota.get_available('cyclades.ram'), |
|
684 |
'cpu': snf.user.quota.get_available('cyclades.cpu'), |
|
685 |
'disk': snf.user.quota.get_available('cyclades.disk') |
|
686 |
} |
|
687 |
return quota; |
|
688 |
}, |
|
689 |
|
|
664 | 690 |
flavor_is_valid: function(flv) { |
665 | 691 |
if (!flv) { return false }; |
666 | 692 |
|
... | ... | |
670 | 696 |
if (this.unavailable_values && (this.unavailable_values.disk.indexOf(parseInt(flv.get("disk")) * 1000) > -1)) { |
671 | 697 |
return false; |
672 | 698 |
} |
699 |
if (this.unavailable_values && (this.unavailable_values.ram.indexOf(parseInt(flv.get("ram"))) > -1)) { |
|
700 |
return false; |
|
701 |
} |
|
702 |
if (this.unavailable_values && (this.unavailable_values.cpu.indexOf(parseInt(flv.get("cpu"))) > -1)) { |
|
703 |
return false; |
|
704 |
} |
|
673 | 705 |
return true; |
674 | 706 |
}, |
675 | 707 |
|
... | ... | |
721 | 753 |
var el_value = $(el).data("value") * 1000; |
722 | 754 |
if (this.unavailable_values.disk.indexOf(el_value) > -1) { |
723 | 755 |
$(el).addClass("disabled"); |
756 |
$(el).removeClass("selected"); |
|
757 |
}; |
|
758 |
}, this)); |
|
759 |
|
|
760 |
this.$("#create-vm-flavor-options .flavor-options.ram li").each(_.bind(function(i, el){ |
|
761 |
var el_value = $(el).data("value"); |
|
762 |
if (this.unavailable_values.ram.indexOf(el_value) > -1) { |
|
763 |
$(el).addClass("disabled"); |
|
764 |
$(el).removeClass("selected"); |
|
765 |
}; |
|
766 |
}, this)); |
|
767 |
|
|
768 |
this.$("#create-vm-flavor-options .flavor-options.cpu li").each(_.bind(function(i, el){ |
|
769 |
var el_value = $(el).data("value"); |
|
770 |
if (this.unavailable_values.cpu.indexOf(el_value) > -1) { |
|
771 |
$(el).addClass("disabled"); |
|
772 |
$(el).removeClass("selected"); |
|
724 | 773 |
}; |
725 | 774 |
}, this)); |
726 | 775 |
}, |
... | ... | |
747 | 796 |
|
748 | 797 |
el.parent().find(".option").removeClass("selected"); |
749 | 798 |
el.addClass("selected"); |
750 |
|
|
799 |
|
|
751 | 800 |
if (el.hasClass("mem")) { self.last_choice = ["ram", $(this).data("value")] } |
752 | 801 |
if (el.hasClass("cpu")) { self.last_choice = ["cpu", $(this).data("value")] } |
753 | 802 |
if (el.hasClass("disk")) { self.last_choice = ["disk", $(this).data("value")] } |
... | ... | |
782 | 831 |
this.$(".option.disk.selected").data("value"), |
783 | 832 |
this.$(".option.disk_template.selected").data("value"), |
784 | 833 |
this.flavors]; |
785 |
|
|
834 |
|
|
786 | 835 |
var flv = storage.flavors.get_flavor.apply(storage.flavors, args); |
787 | 836 |
return flv; |
788 | 837 |
}, |
Also available in: Unified diff