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