root / snf-cyclades-app / synnefo / ui / static / snf / js / ui / web / ui_vm_resize_view.js @ 8a6915df
History | View | Annotate | Download (15.8 kB)
1 | ab3df8df | Kostas Papadimitriou | // Copyright 2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | ab3df8df | Kostas Papadimitriou | //
|
3 | ab3df8df | Kostas Papadimitriou | // Redistribution and use in source and binary forms, with or
|
4 | ab3df8df | Kostas Papadimitriou | // without modification, are permitted provided that the following
|
5 | ab3df8df | Kostas Papadimitriou | // conditions are met:
|
6 | ab3df8df | Kostas Papadimitriou | //
|
7 | ab3df8df | Kostas Papadimitriou | // 1. Redistributions of source code must retain the above
|
8 | ab3df8df | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
9 | ab3df8df | Kostas Papadimitriou | // disclaimer.
|
10 | ab3df8df | Kostas Papadimitriou | //
|
11 | ab3df8df | Kostas Papadimitriou | // 2. Redistributions in binary form must reproduce the above
|
12 | ab3df8df | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
13 | ab3df8df | Kostas Papadimitriou | // disclaimer in the documentation and/or other materials
|
14 | ab3df8df | Kostas Papadimitriou | // provided with the distribution.
|
15 | ab3df8df | Kostas Papadimitriou | //
|
16 | ab3df8df | Kostas Papadimitriou | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | ab3df8df | Kostas Papadimitriou | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | ab3df8df | Kostas Papadimitriou | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | ab3df8df | Kostas Papadimitriou | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | ab3df8df | Kostas Papadimitriou | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | ab3df8df | Kostas Papadimitriou | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | ab3df8df | Kostas Papadimitriou | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | ab3df8df | Kostas Papadimitriou | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | ab3df8df | Kostas Papadimitriou | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | ab3df8df | Kostas Papadimitriou | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | ab3df8df | Kostas Papadimitriou | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | ab3df8df | Kostas Papadimitriou | // POSSIBILITY OF SUCH DAMAGE.
|
28 | ab3df8df | Kostas Papadimitriou | //
|
29 | ab3df8df | Kostas Papadimitriou | // The views and conclusions contained in the software and
|
30 | ab3df8df | Kostas Papadimitriou | // documentation are those of the authors and should not be
|
31 | ab3df8df | Kostas Papadimitriou | // interpreted as representing official policies, either expressed
|
32 | ab3df8df | Kostas Papadimitriou | // or implied, of GRNET S.A.
|
33 | ab3df8df | Kostas Papadimitriou | //
|
34 | ab3df8df | Kostas Papadimitriou | |
35 | ab3df8df | Kostas Papadimitriou | ;(function(root){
|
36 | ab3df8df | Kostas Papadimitriou | |
37 | ab3df8df | Kostas Papadimitriou | // root
|
38 | ab3df8df | Kostas Papadimitriou | var root = root;
|
39 | ab3df8df | Kostas Papadimitriou | |
40 | ab3df8df | Kostas Papadimitriou | // setup namepsaces
|
41 | ab3df8df | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
42 | ab3df8df | Kostas Papadimitriou | var models = snf.models = snf.models || {}
|
43 | ab3df8df | Kostas Papadimitriou | var storage = snf.storage = snf.storage || {};
|
44 | ab3df8df | Kostas Papadimitriou | var ui = snf.ui = snf.ui || {};
|
45 | ab3df8df | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
46 | ab3df8df | Kostas Papadimitriou | |
47 | ab3df8df | Kostas Papadimitriou | var views = snf.views = snf.views || {}
|
48 | ab3df8df | Kostas Papadimitriou | |
49 | ab3df8df | Kostas Papadimitriou | // shortcuts
|
50 | ab3df8df | Kostas Papadimitriou | var bb = root.Backbone;
|
51 | ab3df8df | Kostas Papadimitriou | |
52 | ab3df8df | Kostas Papadimitriou | |
53 | ab3df8df | Kostas Papadimitriou | views.FlavorOptionsView = views.View.extend({ |
54 | ab3df8df | Kostas Papadimitriou | |
55 | ab3df8df | Kostas Papadimitriou | choices_meta: {
|
56 | ab3df8df | Kostas Papadimitriou | 'cpu': {title: 'CPUs', description: 'Choose number of CPU cores'}, |
57 | ab3df8df | Kostas Papadimitriou | 'ram': {title: 'Memory size', description: 'Choose memory size'}, |
58 | ab3df8df | Kostas Papadimitriou | 'disk': {title: 'Disk size', description: 'Choose disk size'}, |
59 | ab3df8df | Kostas Papadimitriou | 'disk_template': {title: 'Storage', description: 'Select storage type'} |
60 | ab3df8df | Kostas Papadimitriou | }, |
61 | ab3df8df | Kostas Papadimitriou | |
62 | ab3df8df | Kostas Papadimitriou | initialize: function(options) { |
63 | ab3df8df | Kostas Papadimitriou | views.FlavorOptionsView.__super__.initialize.apply(this);
|
64 | ab3df8df | Kostas Papadimitriou | _.bindAll(this);
|
65 | ab3df8df | Kostas Papadimitriou | this.$el = $(this.el); |
66 | ab3df8df | Kostas Papadimitriou | this.flavors = options.flavors || synnefo.storage.flavors.active();
|
67 | ab3df8df | Kostas Papadimitriou | this.collection = options.collection || synnefo.storage.flavors;
|
68 | ab3df8df | Kostas Papadimitriou | this.choices = options.choices || ['cpu', 'ram', 'disk', |
69 | ab3df8df | Kostas Papadimitriou | 'disk_template'];
|
70 | ab3df8df | Kostas Papadimitriou | this.hidden_choices = options.hidden_choices || [];
|
71 | ab3df8df | Kostas Papadimitriou | this.quotas = options.quotas || synnefo.storage.quotas;
|
72 | ab3df8df | Kostas Papadimitriou | this.selected_flavor = options.selected_flavor || undefined; |
73 | ab3df8df | Kostas Papadimitriou | this.extra_quotas = options.extra_quotas || undefined; |
74 | ab3df8df | Kostas Papadimitriou | this.render();
|
75 | ab3df8df | Kostas Papadimitriou | if (this.selected_flavor) { this.set_flavor(this.selected_flavor)} |
76 | ab3df8df | Kostas Papadimitriou | }, |
77 | ab3df8df | Kostas Papadimitriou | |
78 | ab3df8df | Kostas Papadimitriou | render: function() { |
79 | ab3df8df | Kostas Papadimitriou | this.$el.empty(); |
80 | ab3df8df | Kostas Papadimitriou | this.each_choice(function(choice) { |
81 | ab3df8df | Kostas Papadimitriou | var el = this[choice + '_el'] = $("<div>"); |
82 | ab3df8df | Kostas Papadimitriou | el.addClass("flavor-options clearfix");
|
83 | ab3df8df | Kostas Papadimitriou | el.addClass(choice); |
84 | ab3df8df | Kostas Papadimitriou | var title = $("<h4 class='clearfix'><span class='title'>" + |
85 | ab3df8df | Kostas Papadimitriou | "</span><span class='available'></span>" +
|
86 | ab3df8df | Kostas Papadimitriou | "<span class='desc'></span></h4>");
|
87 | ab3df8df | Kostas Papadimitriou | el.append(title); |
88 | ab3df8df | Kostas Papadimitriou | el.find("span.title").text(this.choices_meta[choice].title); |
89 | ab3df8df | Kostas Papadimitriou | el.find("span.desc").text(this.choices_meta[choice].description); |
90 | ab3df8df | Kostas Papadimitriou | var ul = $("<ul/>"); |
91 | ab3df8df | Kostas Papadimitriou | ul.addClass("flavors-"+choice+"-list flavor-opts-list clearfix"); |
92 | ab3df8df | Kostas Papadimitriou | el.append(ul); |
93 | ab3df8df | Kostas Papadimitriou | this.$el.append(el); |
94 | ab3df8df | Kostas Papadimitriou | if (this.hidden_choices.indexOf(choice) > -1) { |
95 | ab3df8df | Kostas Papadimitriou | el.hide(); |
96 | ab3df8df | Kostas Papadimitriou | } |
97 | ab3df8df | Kostas Papadimitriou | }); |
98 | ab3df8df | Kostas Papadimitriou | this.update_quota_left();
|
99 | ab3df8df | Kostas Papadimitriou | this.fill();
|
100 | ab3df8df | Kostas Papadimitriou | this.set_unavailable();
|
101 | ab3df8df | Kostas Papadimitriou | this.init_handlers();
|
102 | ab3df8df | Kostas Papadimitriou | }, |
103 | ab3df8df | Kostas Papadimitriou | |
104 | 80bb2140 | Kostas Papadimitriou | get_current: function(choice, value) { |
105 | 80bb2140 | Kostas Papadimitriou | var found = false; |
106 | 80bb2140 | Kostas Papadimitriou | _.each(this.flavors, _.bind(function(f){ |
107 | 80bb2140 | Kostas Papadimitriou | if (found) { return } |
108 | 80bb2140 | Kostas Papadimitriou | if (f.get(choice) == value) {
|
109 | 80bb2140 | Kostas Papadimitriou | found = true;
|
110 | 80bb2140 | Kostas Papadimitriou | to_select = f; |
111 | 80bb2140 | Kostas Papadimitriou | } |
112 | 80bb2140 | Kostas Papadimitriou | }, this));
|
113 | 80bb2140 | Kostas Papadimitriou | }, |
114 | 80bb2140 | Kostas Papadimitriou | |
115 | ab3df8df | Kostas Papadimitriou | init_handlers: function() { |
116 | ab3df8df | Kostas Papadimitriou | this.$el.on('click', 'li.choice', _.bind(function(e) { |
117 | ab3df8df | Kostas Papadimitriou | var el = $(e.target).closest('li'); |
118 | ab3df8df | Kostas Papadimitriou | var choice = el.data('type'); |
119 | ab3df8df | Kostas Papadimitriou | var value = el.data('value'); |
120 | ab3df8df | Kostas Papadimitriou | var to_select = this.selected_flavor; |
121 | ab3df8df | Kostas Papadimitriou | if (to_select) {
|
122 | ab3df8df | Kostas Papadimitriou | var attrs = _.clone(to_select.attributes);
|
123 | ab3df8df | Kostas Papadimitriou | attrs[choice] = value; |
124 | ab3df8df | Kostas Papadimitriou | to_select = this.collection.get_flavor(attrs.cpu, attrs.ram,
|
125 | ab3df8df | Kostas Papadimitriou | attrs.disk, |
126 | ab3df8df | Kostas Papadimitriou | attrs.disk_template); |
127 | ab3df8df | Kostas Papadimitriou | } |
128 | ab3df8df | Kostas Papadimitriou | |
129 | ab3df8df | Kostas Papadimitriou | if (!to_select) {
|
130 | 80bb2140 | Kostas Papadimitriou | to_select = this.get_current(choice, value);
|
131 | ab3df8df | Kostas Papadimitriou | } |
132 | ab3df8df | Kostas Papadimitriou | this.set_flavor(to_select);
|
133 | ab3df8df | Kostas Papadimitriou | }, this));
|
134 | ab3df8df | Kostas Papadimitriou | }, |
135 | ab3df8df | Kostas Papadimitriou | |
136 | ab3df8df | Kostas Papadimitriou | update_quota_left: function() { |
137 | ab3df8df | Kostas Papadimitriou | this.each_choice(function(choice){ |
138 | ab3df8df | Kostas Papadimitriou | var el = this[choice + '_el'].find(".available"); |
139 | ab3df8df | Kostas Papadimitriou | el.removeClass("error");
|
140 | ab3df8df | Kostas Papadimitriou | var quota = this.quotas.get('cyclades.'+choice); |
141 | ab3df8df | Kostas Papadimitriou | if (!quota) { return } |
142 | ab3df8df | Kostas Papadimitriou | var type = choice;
|
143 | ab3df8df | Kostas Papadimitriou | var active = true; |
144 | ab3df8df | Kostas Papadimitriou | var key = 'available'; |
145 | ab3df8df | Kostas Papadimitriou | var quotas = synnefo.storage.quotas;
|
146 | ab3df8df | Kostas Papadimitriou | var available_dsp = quotas.get('cyclades.'+type).get_readable(key, active); |
147 | ab3df8df | Kostas Papadimitriou | var available = quotas.get('cyclades.'+type).get(key); |
148 | ab3df8df | Kostas Papadimitriou | var content = "({0} left)".format(available_dsp); |
149 | ab3df8df | Kostas Papadimitriou | if (available <= 0) { content = "(None left)"; el.addClass("error") } |
150 | ab3df8df | Kostas Papadimitriou | el.text(content); |
151 | ab3df8df | Kostas Papadimitriou | }); |
152 | ab3df8df | Kostas Papadimitriou | }, |
153 | ab3df8df | Kostas Papadimitriou | |
154 | ab3df8df | Kostas Papadimitriou | metric_for_choice: function(choice) { |
155 | effaa598 | Dionysis Grigoropoulos | var map = {ram:'MB', cpu:'X', disk:'GB', disk_template:''}; |
156 | ab3df8df | Kostas Papadimitriou | return map[choice] || ''; |
157 | ab3df8df | Kostas Papadimitriou | }, |
158 | ab3df8df | Kostas Papadimitriou | |
159 | ab3df8df | Kostas Papadimitriou | set_unavailable: function() { |
160 | ab3df8df | Kostas Papadimitriou | this.$el.find("li.choice").removeClass("disabled"); |
161 | ab3df8df | Kostas Papadimitriou | var quotas = this.quotas.get_available_for_vm({'active': true}); |
162 | ab3df8df | Kostas Papadimitriou | var extra_quotas = this.extra_quotas; |
163 | ab3df8df | Kostas Papadimitriou | var user_excluded = storage.flavors.unavailable_values_for_quotas(
|
164 | ab3df8df | Kostas Papadimitriou | quotas, |
165 | 80bb2140 | Kostas Papadimitriou | storage.flavors.active(), extra_quotas); |
166 | ab3df8df | Kostas Papadimitriou | _.each(user_excluded, _.bind(function(values, key) {
|
167 | ab3df8df | Kostas Papadimitriou | _.each(values, _.bind(function(value) {
|
168 | ab3df8df | Kostas Papadimitriou | var choice_el = this.select_choice(key, value); |
169 | 80bb2140 | Kostas Papadimitriou | choice_el.addClass("disabled").removeClass("selected"); |
170 | ab3df8df | Kostas Papadimitriou | }, this));
|
171 | ab3df8df | Kostas Papadimitriou | }, this));
|
172 | ab3df8df | Kostas Papadimitriou | }, |
173 | ab3df8df | Kostas Papadimitriou | |
174 | ab3df8df | Kostas Papadimitriou | select_choice: function(key, value) { |
175 | ab3df8df | Kostas Papadimitriou | return this.$el.find(".choice[data-type="+key+"][data-value="+value+"]"); |
176 | ab3df8df | Kostas Papadimitriou | }, |
177 | ab3df8df | Kostas Papadimitriou | |
178 | ab3df8df | Kostas Papadimitriou | fill: function(flavors) { |
179 | ab3df8df | Kostas Papadimitriou | var flavors = flavors || this.flavors; |
180 | ab3df8df | Kostas Papadimitriou | var data = this.collection.get_data(flavors); |
181 | ab3df8df | Kostas Papadimitriou | this.each_choice(function(choice) { |
182 | ab3df8df | Kostas Papadimitriou | var el = this[choice + '_el'].find("ul"); |
183 | ab3df8df | Kostas Papadimitriou | el.empty(); |
184 | ab3df8df | Kostas Papadimitriou | var key = choice;
|
185 | ab3df8df | Kostas Papadimitriou | if (key == 'ram') { key = 'mem'} |
186 | ab3df8df | Kostas Papadimitriou | var values = data[key];
|
187 | ab3df8df | Kostas Papadimitriou | if (!values) { return } |
188 | ab3df8df | Kostas Papadimitriou | _.each(values, _.bind(function(value) {
|
189 | ab3df8df | Kostas Papadimitriou | var entry = $("<li class='choice choice-" + choice + "' " + |
190 | ab3df8df | Kostas Papadimitriou | "data-value=" + value +
|
191 | ab3df8df | Kostas Papadimitriou | " data-type=" + choice + ">" + |
192 | ab3df8df | Kostas Papadimitriou | "<span class='value'></span>" +
|
193 | ab3df8df | Kostas Papadimitriou | "<span class='metric'></span></li>");
|
194 | ab3df8df | Kostas Papadimitriou | entry.find(".value").text(value);
|
195 | ab3df8df | Kostas Papadimitriou | entry.find(".metric").text(this.metric_for_choice(choice)); |
196 | ab3df8df | Kostas Papadimitriou | el.append(entry); |
197 | ab3df8df | Kostas Papadimitriou | el.attr('value', value);
|
198 | ab3df8df | Kostas Papadimitriou | }, this));
|
199 | ab3df8df | Kostas Papadimitriou | }); |
200 | ab3df8df | Kostas Papadimitriou | }, |
201 | ab3df8df | Kostas Papadimitriou | |
202 | ab3df8df | Kostas Papadimitriou | set_flavor: function(flavor) { |
203 | ab3df8df | Kostas Papadimitriou | this.$el.find("li").removeClass("selected"); |
204 | ab3df8df | Kostas Papadimitriou | if (!flavor) {this.selected_flavor = undefined; return} |
205 | 80bb2140 | Kostas Papadimitriou | var no_select = false; |
206 | 80bb2140 | Kostas Papadimitriou | var self = this; |
207 | ab3df8df | Kostas Papadimitriou | this.each_choice(function(choice){ |
208 | ab3df8df | Kostas Papadimitriou | var el = this[choice + '_el']; |
209 | ab3df8df | Kostas Papadimitriou | var choice = el.find('.choice-'+choice+'[data-value='+flavor.get(choice)+']'); |
210 | ab3df8df | Kostas Papadimitriou | choice.addClass("selected");
|
211 | ab3df8df | Kostas Papadimitriou | }); |
212 | ab3df8df | Kostas Papadimitriou | this.selected_flavor = flavor;
|
213 | ab3df8df | Kostas Papadimitriou | this.trigger("flavor:select", this.selected_flavor); |
214 | 80bb2140 | Kostas Papadimitriou | return this.selected_flavor; |
215 | ab3df8df | Kostas Papadimitriou | }, |
216 | ab3df8df | Kostas Papadimitriou | |
217 | ab3df8df | Kostas Papadimitriou | each_choice: function(f) { |
218 | ab3df8df | Kostas Papadimitriou | return _.each(this.choices, _.bind(f, this)); |
219 | ab3df8df | Kostas Papadimitriou | } |
220 | ab3df8df | Kostas Papadimitriou | }); |
221 | ab3df8df | Kostas Papadimitriou | |
222 | ab3df8df | Kostas Papadimitriou | views.VmResizeView = views.Overlay.extend({ |
223 | ab3df8df | Kostas Papadimitriou | |
224 | ab3df8df | Kostas Papadimitriou | view_id: "vm_resize_view", |
225 | ab3df8df | Kostas Papadimitriou | content_selector: "#vm-resize-overlay-content", |
226 | ab3df8df | Kostas Papadimitriou | css_class: 'overlay-vm-resize overlay-info', |
227 | ab3df8df | Kostas Papadimitriou | overlay_id: "vm-resize-overlay", |
228 | ab3df8df | Kostas Papadimitriou | |
229 | ab3df8df | Kostas Papadimitriou | subtitle: "", |
230 | ab3df8df | Kostas Papadimitriou | title: "Resize Machine", |
231 | ab3df8df | Kostas Papadimitriou | |
232 | ab3df8df | Kostas Papadimitriou | initialize: function(options) { |
233 | ab3df8df | Kostas Papadimitriou | this.flavors_view = undefined; |
234 | ab3df8df | Kostas Papadimitriou | views.VmResizeView.__super__.initialize.apply(this);
|
235 | ab3df8df | Kostas Papadimitriou | _.bindAll(this);
|
236 | ddb7229d | Kostas Papadimitriou | this.submit = this.$(".form-action.resize"); |
237 | ddb7229d | Kostas Papadimitriou | this.shutdown = this.$(".form-action.shutdown"); |
238 | ab3df8df | Kostas Papadimitriou | this.pre_init_handlers();
|
239 | ddb7229d | Kostas Papadimitriou | this.handle_shutdown_complete = _.bind(this.handle_shutdown_complete, this); |
240 | ab3df8df | Kostas Papadimitriou | }, |
241 | ab3df8df | Kostas Papadimitriou | |
242 | ab3df8df | Kostas Papadimitriou | pre_init_handlers: function() { |
243 | ab3df8df | Kostas Papadimitriou | this.submit.click(_.bind(function(){ |
244 | ab3df8df | Kostas Papadimitriou | if (this.submit.hasClass("disabled")) { |
245 | ab3df8df | Kostas Papadimitriou | return;
|
246 | ab3df8df | Kostas Papadimitriou | }; |
247 | ab3df8df | Kostas Papadimitriou | this.submit_resize(this.flavors_view.selected_flavor); |
248 | ab3df8df | Kostas Papadimitriou | }, this));
|
249 | ddb7229d | Kostas Papadimitriou | this.shutdown.click(_.bind(this.handle_shutdown, this)); |
250 | ab3df8df | Kostas Papadimitriou | }, |
251 | ab3df8df | Kostas Papadimitriou | |
252 | ddb7229d | Kostas Papadimitriou | handle_shutdown: function() { |
253 | ddb7229d | Kostas Papadimitriou | if (this.shutdown.hasClass("in-progress") || |
254 | ddb7229d | Kostas Papadimitriou | this.shutdown.hasClass("disabled")) { |
255 | ddb7229d | Kostas Papadimitriou | return;
|
256 | ddb7229d | Kostas Papadimitriou | } |
257 | ddb7229d | Kostas Papadimitriou | |
258 | ddb7229d | Kostas Papadimitriou | this.shutdown.addClass("in-progress"); |
259 | ddb7229d | Kostas Papadimitriou | |
260 | ddb7229d | Kostas Papadimitriou | this.vm.unbind("change:status", this.handle_shutdown_complete); |
261 | ddb7229d | Kostas Papadimitriou | this.vm.bind("change:status", this.handle_shutdown_complete); |
262 | ddb7229d | Kostas Papadimitriou | |
263 | ddb7229d | Kostas Papadimitriou | var self = this; |
264 | d05c0547 | Kostas Papadimitriou | this.vm.call("shutdown", undefined, function() { |
265 | d05c0547 | Kostas Papadimitriou | self.shutdown.removeClass("in-progress");
|
266 | d05c0547 | Kostas Papadimitriou | self.update_layout(); |
267 | d05c0547 | Kostas Papadimitriou | self.hide(); |
268 | d05c0547 | Kostas Papadimitriou | }); |
269 | ddb7229d | Kostas Papadimitriou | }, |
270 | ddb7229d | Kostas Papadimitriou | |
271 | ddb7229d | Kostas Papadimitriou | handle_shutdown_complete: function(vm) { |
272 | 80bb2140 | Kostas Papadimitriou | if (!vm.is_active()) {
|
273 | ddb7229d | Kostas Papadimitriou | this.shutdown.removeClass("in-progress"); |
274 | ddb7229d | Kostas Papadimitriou | this.vm.unbind("change:status", this.handle_shutdown_complete); |
275 | ddb7229d | Kostas Papadimitriou | } |
276 | ddb7229d | Kostas Papadimitriou | }, |
277 | ddb7229d | Kostas Papadimitriou | |
278 | ab3df8df | Kostas Papadimitriou | submit_resize: function(flv) { |
279 | ddb7229d | Kostas Papadimitriou | if (this.submit.hasClass("in-progress")) { return } |
280 | ab3df8df | Kostas Papadimitriou | this.submit.addClass("in-progress"); |
281 | ab3df8df | Kostas Papadimitriou | var complete = _.bind(function() { |
282 | ab3df8df | Kostas Papadimitriou | this.vm.set({'flavor': flv}); |
283 | ab3df8df | Kostas Papadimitriou | this.vm.set({'flavorRef': flv.id}); |
284 | ddb7229d | Kostas Papadimitriou | this.hide();
|
285 | ab3df8df | Kostas Papadimitriou | }, this);
|
286 | ab3df8df | Kostas Papadimitriou | this.vm.call("resize", complete, complete, {flavor:flv.id}); |
287 | ab3df8df | Kostas Papadimitriou | }, |
288 | 80bb2140 | Kostas Papadimitriou | |
289 | 80bb2140 | Kostas Papadimitriou | show_with_warning: function(vm) { |
290 | 80bb2140 | Kostas Papadimitriou | this.show(vm);
|
291 | 80bb2140 | Kostas Papadimitriou | this.start_warning.show();
|
292 | 80bb2140 | Kostas Papadimitriou | }, |
293 | ab3df8df | Kostas Papadimitriou | |
294 | ab3df8df | Kostas Papadimitriou | show: function(vm) { |
295 | 80bb2140 | Kostas Papadimitriou | this.start_warning = this.$(".warning.start").hide(); |
296 | 80bb2140 | Kostas Papadimitriou | this.start_warning.hide();
|
297 | ab3df8df | Kostas Papadimitriou | this.submit.removeClass("in-progress"); |
298 | ab3df8df | Kostas Papadimitriou | this.vm = vm;
|
299 | ab3df8df | Kostas Papadimitriou | this.vm.bind("change", this.handle_vm_change); |
300 | ab3df8df | Kostas Papadimitriou | if (this.flavors_view) { |
301 | ab3df8df | Kostas Papadimitriou | this.flavors_view.remove();
|
302 | ab3df8df | Kostas Papadimitriou | } |
303 | 80bb2140 | Kostas Papadimitriou | this.warning = this.$(".warning.shutdown"); |
304 | ddb7229d | Kostas Papadimitriou | this.warning.hide();
|
305 | ddb7229d | Kostas Papadimitriou | this.submit.show();
|
306 | 80bb2140 | Kostas Papadimitriou | this.shutdown.removeClass("in-progress"); |
307 | ddb7229d | Kostas Papadimitriou | this.$(".flavor-options-inner-cont").append("<div>"); |
308 | 80bb2140 | Kostas Papadimitriou | var extra_quota = this.vm.get_flavor_quotas(); |
309 | 80bb2140 | Kostas Papadimitriou | if (!this.vm.is_active()) { |
310 | 80bb2140 | Kostas Papadimitriou | extra_quota = undefined;
|
311 | 80bb2140 | Kostas Papadimitriou | } |
312 | ddb7229d | Kostas Papadimitriou | this.flavors_view = new snf.views.FlavorOptionsView({ |
313 | ddb7229d | Kostas Papadimitriou | flavors:this.vm.get_resize_flavors(), |
314 | ddb7229d | Kostas Papadimitriou | el: this.$(".flavor-options-inner-cont div"), |
315 | ddb7229d | Kostas Papadimitriou | hidden_choices:['disk', 'disk_template'], |
316 | ddb7229d | Kostas Papadimitriou | selected_flavor: this.vm.get_flavor(), |
317 | 80bb2140 | Kostas Papadimitriou | extra_quotas: extra_quota
|
318 | ddb7229d | Kostas Papadimitriou | }); |
319 | 7c56ca01 | Kostas Papadimitriou | this.selected_flavor = this.vm.get_flavor(); |
320 | 9562bff7 | Kostas Papadimitriou | this.handle_flavor_select(this.selected_flavor); |
321 | ddb7229d | Kostas Papadimitriou | this.flavors_view.bind("flavor:select", this.handle_flavor_select) |
322 | ddb7229d | Kostas Papadimitriou | this.submit.addClass("disabled"); |
323 | ab3df8df | Kostas Papadimitriou | views.VmResizeView.__super__.show.apply(this);
|
324 | ab3df8df | Kostas Papadimitriou | }, |
325 | ab3df8df | Kostas Papadimitriou | |
326 | ab3df8df | Kostas Papadimitriou | handle_flavor_select: function(flv) { |
327 | 80bb2140 | Kostas Papadimitriou | this.selected_flavor = flv;
|
328 | 80bb2140 | Kostas Papadimitriou | if (!flv || (flv.id == this.vm.get_flavor().id)) { |
329 | ab3df8df | Kostas Papadimitriou | this.submit.addClass("disabled"); |
330 | 00d6e62e | Kostas Papadimitriou | if (!this.shutdown.hasClass("in-progress")) { |
331 | 00d6e62e | Kostas Papadimitriou | this.shutdown.addClass("disabled"); |
332 | 00d6e62e | Kostas Papadimitriou | } |
333 | ab3df8df | Kostas Papadimitriou | } else {
|
334 | ddb7229d | Kostas Papadimitriou | if (this.vm.can_resize()) { |
335 | ddb7229d | Kostas Papadimitriou | this.submit.removeClass("disabled"); |
336 | ddb7229d | Kostas Papadimitriou | } else {
|
337 | ddb7229d | Kostas Papadimitriou | this.shutdown.removeClass("disabled hidden"); |
338 | ddb7229d | Kostas Papadimitriou | this.warning.show();
|
339 | ddb7229d | Kostas Papadimitriou | } |
340 | ab3df8df | Kostas Papadimitriou | } |
341 | 80bb2140 | Kostas Papadimitriou | if (flv && !this.vm.can_start(flv, true)) { |
342 | 80bb2140 | Kostas Papadimitriou | if (!this.vm.is_active()) { |
343 | 80bb2140 | Kostas Papadimitriou | this.start_warning.show();
|
344 | 80bb2140 | Kostas Papadimitriou | } |
345 | 80bb2140 | Kostas Papadimitriou | } else {
|
346 | 80bb2140 | Kostas Papadimitriou | this.start_warning.hide();
|
347 | 80bb2140 | Kostas Papadimitriou | } |
348 | ddb7229d | Kostas Papadimitriou | this.update_vm_status();
|
349 | ddb7229d | Kostas Papadimitriou | }, |
350 | ddb7229d | Kostas Papadimitriou | |
351 | ddb7229d | Kostas Papadimitriou | update_vm_status: function() { |
352 | 80bb2140 | Kostas Papadimitriou | if (this.vm.get("status") == "STOPPED") { |
353 | 80bb2140 | Kostas Papadimitriou | this.warning.hide();
|
354 | ddb7229d | Kostas Papadimitriou | } |
355 | ddb7229d | Kostas Papadimitriou | if (this.vm.get("status") == "SHUTDOWN") { |
356 | ddb7229d | Kostas Papadimitriou | this.shutdown.addClass("in-progress").removeClass("disabled"); |
357 | ddb7229d | Kostas Papadimitriou | this.warning.hide();
|
358 | ddb7229d | Kostas Papadimitriou | } |
359 | ab3df8df | Kostas Papadimitriou | }, |
360 | ab3df8df | Kostas Papadimitriou | |
361 | ab3df8df | Kostas Papadimitriou | beforeOpen: function() { |
362 | ab3df8df | Kostas Papadimitriou | this.update_layout();
|
363 | ab3df8df | Kostas Papadimitriou | this.init_handlers();
|
364 | ab3df8df | Kostas Papadimitriou | }, |
365 | ab3df8df | Kostas Papadimitriou | |
366 | ab3df8df | Kostas Papadimitriou | update_layout: function() { |
367 | ddb7229d | Kostas Papadimitriou | this.update_actions();
|
368 | ab3df8df | Kostas Papadimitriou | this.update_vm_details();
|
369 | ab3df8df | Kostas Papadimitriou | this.render_choices();
|
370 | ddb7229d | Kostas Papadimitriou | this.update_vm_status();
|
371 | ddb7229d | Kostas Papadimitriou | }, |
372 | ddb7229d | Kostas Papadimitriou | |
373 | ddb7229d | Kostas Papadimitriou | update_actions: function() { |
374 | ddb7229d | Kostas Papadimitriou | if (!this.vm.can_resize()) { |
375 | ddb7229d | Kostas Papadimitriou | this.shutdown.show();
|
376 | ddb7229d | Kostas Papadimitriou | this.warning.show();
|
377 | ddb7229d | Kostas Papadimitriou | this.shutdown.removeClass("disabled"); |
378 | ddb7229d | Kostas Papadimitriou | if (this.selected_flavor) { |
379 | ddb7229d | Kostas Papadimitriou | this.handle_flavor_select(this.selected_flavor); |
380 | ddb7229d | Kostas Papadimitriou | } else {
|
381 | 00d6e62e | Kostas Papadimitriou | if (!this.shutdown.hasClass("in-progress")) { |
382 | 00d6e62e | Kostas Papadimitriou | this.shutdown.addClass("disabled"); |
383 | 00d6e62e | Kostas Papadimitriou | } |
384 | ddb7229d | Kostas Papadimitriou | } |
385 | ddb7229d | Kostas Papadimitriou | this.submit.addClass("disabled"); |
386 | ddb7229d | Kostas Papadimitriou | } else {
|
387 | 9562bff7 | Kostas Papadimitriou | if (this.selected_flavor && this.selected_flavor.id != this.vm.get_flavor().id) { |
388 | 80bb2140 | Kostas Papadimitriou | this.submit.removeClass("disabled"); |
389 | 80bb2140 | Kostas Papadimitriou | } |
390 | ddb7229d | Kostas Papadimitriou | this.shutdown.hide();
|
391 | ddb7229d | Kostas Papadimitriou | } |
392 | ab3df8df | Kostas Papadimitriou | }, |
393 | ab3df8df | Kostas Papadimitriou | |
394 | ab3df8df | Kostas Papadimitriou | render_choices: function() { |
395 | ab3df8df | Kostas Papadimitriou | }, |
396 | ab3df8df | Kostas Papadimitriou | |
397 | ab3df8df | Kostas Papadimitriou | update_vm_details: function() { |
398 | deeeb954 | Kostas Papadimitriou | var name = _.escape(util.truncate(this.vm.get("name"), 70)); |
399 | ddb7229d | Kostas Papadimitriou | this.set_subtitle(name + snf.ui.helpers.vm_icon_tag(this.vm, "small")); |
400 | ab3df8df | Kostas Papadimitriou | }, |
401 | ab3df8df | Kostas Papadimitriou | |
402 | ab3df8df | Kostas Papadimitriou | handle_vm_change: function() { |
403 | ab3df8df | Kostas Papadimitriou | this.update_layout();
|
404 | ab3df8df | Kostas Papadimitriou | }, |
405 | ab3df8df | Kostas Papadimitriou | |
406 | ab3df8df | Kostas Papadimitriou | init_handlers: function() { |
407 | ab3df8df | Kostas Papadimitriou | }, |
408 | ab3df8df | Kostas Papadimitriou | |
409 | ab3df8df | Kostas Papadimitriou | onClose: function() { |
410 | ab3df8df | Kostas Papadimitriou | this.editing = false; |
411 | ab3df8df | Kostas Papadimitriou | this.vm.unbind("change", this.handle_vm_change); |
412 | ddb7229d | Kostas Papadimitriou | this.vm.unbind("change:status", this.handle_shutdown_complete); |
413 | ab3df8df | Kostas Papadimitriou | this.vm = undefined; |
414 | ab3df8df | Kostas Papadimitriou | } |
415 | ab3df8df | Kostas Papadimitriou | }); |
416 | ab3df8df | Kostas Papadimitriou | |
417 | ab3df8df | Kostas Papadimitriou | })(this);
|