root / ui / static / snf / js / ui / web / ui_create_view.js @ a1dbcae1
History | View | Annotate | Download (27.9 kB)
1 | 8d08f18a | Kostas Papadimitriou | ;(function(root){
|
---|---|---|---|
2 | 8d08f18a | Kostas Papadimitriou | |
3 | 8d08f18a | Kostas Papadimitriou | // root
|
4 | 8d08f18a | Kostas Papadimitriou | var root = root;
|
5 | 8d08f18a | Kostas Papadimitriou | |
6 | 8d08f18a | Kostas Papadimitriou | // setup namepsaces
|
7 | 8d08f18a | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
8 | 8d08f18a | Kostas Papadimitriou | var models = snf.models = snf.models || {}
|
9 | 8d08f18a | Kostas Papadimitriou | var storage = snf.storage = snf.storage || {};
|
10 | 8d08f18a | Kostas Papadimitriou | var ui = snf.ui = snf.ui || {};
|
11 | 8d08f18a | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
12 | 8d08f18a | Kostas Papadimitriou | |
13 | 8d08f18a | Kostas Papadimitriou | var views = snf.views = snf.views || {}
|
14 | 8d08f18a | Kostas Papadimitriou | |
15 | 8d08f18a | Kostas Papadimitriou | // shortcuts
|
16 | 8d08f18a | Kostas Papadimitriou | var bb = root.Backbone;
|
17 | 8d08f18a | Kostas Papadimitriou | |
18 | 8d08f18a | Kostas Papadimitriou | |
19 | 8d08f18a | Kostas Papadimitriou | views.VMCreationPasswordView = views.Overlay.extend({ |
20 | 8d08f18a | Kostas Papadimitriou | view_id: "creation_password_view", |
21 | 8d08f18a | Kostas Papadimitriou | content_selector: "#creation-password-overlay", |
22 | 8d08f18a | Kostas Papadimitriou | css_class: 'overlay-password overlay-info', |
23 | 8d08f18a | Kostas Papadimitriou | overlay_id: "creation-password-overlay", |
24 | 8d08f18a | Kostas Papadimitriou | |
25 | 8d08f18a | Kostas Papadimitriou | subtitle: "", |
26 | 8d08f18a | Kostas Papadimitriou | title: "Machine password", |
27 | 8d08f18a | Kostas Papadimitriou | |
28 | 8d08f18a | Kostas Papadimitriou | initialize: function(options) { |
29 | 8d08f18a | Kostas Papadimitriou | views.FeedbackView.__super__.initialize.apply(this, arguments); |
30 | 8d08f18a | Kostas Papadimitriou | _.bindAll(this, 'show_password'); |
31 | 8d08f18a | Kostas Papadimitriou | |
32 | 8d08f18a | Kostas Papadimitriou | this.password = this.$("#new-machine-password"); |
33 | 60599850 | Kostas Papadimitriou | |
34 | 60599850 | Kostas Papadimitriou | this.$(".show-machine").click(_.bind(function(){ |
35 | 60599850 | Kostas Papadimitriou | this.hide();
|
36 | 60599850 | Kostas Papadimitriou | snf.ui.main.show_vm_details(storage.vms.get(this.vm_id));
|
37 | 60599850 | Kostas Papadimitriou | }, this));
|
38 | 8d08f18a | Kostas Papadimitriou | }, |
39 | 8d08f18a | Kostas Papadimitriou | |
40 | 8d08f18a | Kostas Papadimitriou | show_password: function() { |
41 | 8d08f18a | Kostas Papadimitriou | this.password.text(this.pass); |
42 | 8d08f18a | Kostas Papadimitriou | }, |
43 | 8d08f18a | Kostas Papadimitriou | |
44 | 8d08f18a | Kostas Papadimitriou | onClose: function() { |
45 | 8d08f18a | Kostas Papadimitriou | this.password.text(""); |
46 | 8d08f18a | Kostas Papadimitriou | }, |
47 | 8d08f18a | Kostas Papadimitriou | |
48 | 8d08f18a | Kostas Papadimitriou | show: function(pass, vm_id) { |
49 | 8d08f18a | Kostas Papadimitriou | this.pass = pass;
|
50 | 8d08f18a | Kostas Papadimitriou | this.vm_id = vm_id;
|
51 | 8d08f18a | Kostas Papadimitriou | |
52 | 8d08f18a | Kostas Papadimitriou | views.VMCreationPasswordView.__super__.show.apply(this, arguments); |
53 | 8d08f18a | Kostas Papadimitriou | this.show_password();
|
54 | 8d08f18a | Kostas Papadimitriou | } |
55 | 8d08f18a | Kostas Papadimitriou | }) |
56 | 8d08f18a | Kostas Papadimitriou | |
57 | 8d08f18a | Kostas Papadimitriou | |
58 | 8d08f18a | Kostas Papadimitriou | |
59 | 8d08f18a | Kostas Papadimitriou | views.CreateVMStepView = views.View.extend({ |
60 | 8d08f18a | Kostas Papadimitriou | step: "1", |
61 | 8d08f18a | Kostas Papadimitriou | title: "Image", |
62 | 8d08f18a | Kostas Papadimitriou | submit: false, |
63 | 8d08f18a | Kostas Papadimitriou | |
64 | 8d08f18a | Kostas Papadimitriou | initialize: function(view) { |
65 | 8d08f18a | Kostas Papadimitriou | this.parent = view;
|
66 | 8d08f18a | Kostas Papadimitriou | this.el = view.$("div.create-step-cont.step-" + this.step); |
67 | 820ef2f0 | Kostas Papadimitriou | this.header = this.$(".step-header .step-" + this.step); |
68 | 8d08f18a | Kostas Papadimitriou | this.view_id = "create_step_" + this.step; |
69 | 8d08f18a | Kostas Papadimitriou | |
70 | 8d08f18a | Kostas Papadimitriou | views.CreateVMStepView.__super__.initialize.apply(this);
|
71 | 8d08f18a | Kostas Papadimitriou | }, |
72 | 8d08f18a | Kostas Papadimitriou | |
73 | 8d08f18a | Kostas Papadimitriou | show: function() { |
74 | 8d08f18a | Kostas Papadimitriou | // show current
|
75 | 8d08f18a | Kostas Papadimitriou | this.el.show();
|
76 | 8d08f18a | Kostas Papadimitriou | this.header.addClass("current"); |
77 | 820ef2f0 | Kostas Papadimitriou | this.header.show();
|
78 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
79 | 8d08f18a | Kostas Papadimitriou | }, |
80 | 8d08f18a | Kostas Papadimitriou | |
81 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
82 | 8d08f18a | Kostas Papadimitriou | } |
83 | 8d08f18a | Kostas Papadimitriou | }) |
84 | 8d08f18a | Kostas Papadimitriou | |
85 | 8d08f18a | Kostas Papadimitriou | views.CreateImageSelectView = views.CreateVMStepView.extend({ |
86 | 8d08f18a | Kostas Papadimitriou | |
87 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
88 | 8d08f18a | Kostas Papadimitriou | views.CreateImageSelectView.__super__.initialize.apply(this, arguments); |
89 | 8d08f18a | Kostas Papadimitriou | |
90 | 820ef2f0 | Kostas Papadimitriou | // elements
|
91 | 73e25ce2 | Kostas Papadimitriou | this.images_list_cont = this.$(".images-list-cont"); |
92 | 820ef2f0 | Kostas Papadimitriou | this.images_list = this.$(".images-list-cont ul"); |
93 | 820ef2f0 | Kostas Papadimitriou | this.image_details = this.$(".images-info-cont"); |
94 | 820ef2f0 | Kostas Papadimitriou | this.image_details_desc = this.$(".images-info-cont .description p"); |
95 | 820ef2f0 | Kostas Papadimitriou | this.image_details_title = this.$(".images-info-cont h4"); |
96 | 820ef2f0 | Kostas Papadimitriou | this.image_details_size = this.$(".images-info-cont .size p"); |
97 | 820ef2f0 | Kostas Papadimitriou | this.image_details_os = this.$(".images-info-cont .os p"); |
98 | 820ef2f0 | Kostas Papadimitriou | this.image_details_kernel = this.$(".images-info-cont .kernel p"); |
99 | 820ef2f0 | Kostas Papadimitriou | this.image_details_gui = this.$(".images-info-cont .gui p"); |
100 | 820ef2f0 | Kostas Papadimitriou | |
101 | 820ef2f0 | Kostas Papadimitriou | this.types = this.$(".type-filter li"); |
102 | 820ef2f0 | Kostas Papadimitriou | this.categories_list = this.$(".category-filters"); |
103 | 820ef2f0 | Kostas Papadimitriou | |
104 | 820ef2f0 | Kostas Papadimitriou | // params initialization
|
105 | 820ef2f0 | Kostas Papadimitriou | this.type_selections = ["system", "custom"] |
106 | 820ef2f0 | Kostas Papadimitriou | this.selected_type = "system"; |
107 | 820ef2f0 | Kostas Papadimitriou | this.selected_categories = [];
|
108 | 820ef2f0 | Kostas Papadimitriou | this.images = [];
|
109 | 820ef2f0 | Kostas Papadimitriou | |
110 | 820ef2f0 | Kostas Papadimitriou | // update
|
111 | 820ef2f0 | Kostas Papadimitriou | this.update_images();
|
112 | 820ef2f0 | Kostas Papadimitriou | |
113 | 820ef2f0 | Kostas Papadimitriou | // handlers initialization
|
114 | 820ef2f0 | Kostas Papadimitriou | this.init_handlers();
|
115 | 820ef2f0 | Kostas Papadimitriou | this.init_position();
|
116 | 820ef2f0 | Kostas Papadimitriou | }, |
117 | 820ef2f0 | Kostas Papadimitriou | |
118 | 820ef2f0 | Kostas Papadimitriou | init_position: function() { |
119 | 820ef2f0 | Kostas Papadimitriou | //this.el.css({position: "absolute"});
|
120 | 820ef2f0 | Kostas Papadimitriou | //this.el.css({top:"10px"})
|
121 | 820ef2f0 | Kostas Papadimitriou | }, |
122 | 820ef2f0 | Kostas Papadimitriou | |
123 | 820ef2f0 | Kostas Papadimitriou | init_handlers: function() { |
124 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
125 | 820ef2f0 | Kostas Papadimitriou | this.types.live("click", function() { |
126 | 820ef2f0 | Kostas Papadimitriou | self.select_type($(this).attr("id").replace("type-select-","")); |
127 | 820ef2f0 | Kostas Papadimitriou | }) |
128 | 820ef2f0 | Kostas Papadimitriou | }, |
129 | 820ef2f0 | Kostas Papadimitriou | |
130 | 820ef2f0 | Kostas Papadimitriou | update_images: function() { |
131 | 820ef2f0 | Kostas Papadimitriou | this.images = storage.images.active();
|
132 | 820ef2f0 | Kostas Papadimitriou | this.images_ids = _.map(this.images, function(img){return img.id}); |
133 | 820ef2f0 | Kostas Papadimitriou | if (this.selected_type == "custom") { this.images = []; this.images_ids = []; } |
134 | 820ef2f0 | Kostas Papadimitriou | |
135 | 820ef2f0 | Kostas Papadimitriou | return this.images; |
136 | 8d08f18a | Kostas Papadimitriou | }, |
137 | 8d08f18a | Kostas Papadimitriou | |
138 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
139 | 820ef2f0 | Kostas Papadimitriou | this.select_type(this.selected_type); |
140 | 820ef2f0 | Kostas Papadimitriou | }, |
141 | 820ef2f0 | Kostas Papadimitriou | |
142 | 820ef2f0 | Kostas Papadimitriou | get_categories: function(images) { |
143 | 820ef2f0 | Kostas Papadimitriou | return [];
|
144 | 820ef2f0 | Kostas Papadimitriou | return ["Desktop", "Server", "Linux", "Windows"]; |
145 | 820ef2f0 | Kostas Papadimitriou | }, |
146 | 820ef2f0 | Kostas Papadimitriou | |
147 | 820ef2f0 | Kostas Papadimitriou | reset_categories: function() { |
148 | 820ef2f0 | Kostas Papadimitriou | var categories = this.get_categories(this.images); |
149 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.find("li").remove(); |
150 | 820ef2f0 | Kostas Papadimitriou | |
151 | 820ef2f0 | Kostas Papadimitriou | _.each(categories, _.bind(function(cat) {
|
152 | 820ef2f0 | Kostas Papadimitriou | var el = $("<li />"); |
153 | 820ef2f0 | Kostas Papadimitriou | el.text(cat); |
154 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.append(el);
|
155 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
156 | 820ef2f0 | Kostas Papadimitriou | |
157 | 820ef2f0 | Kostas Papadimitriou | if (!categories.length) {
|
158 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".clear").hide(); |
159 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".empty").show(); |
160 | 820ef2f0 | Kostas Papadimitriou | } else {
|
161 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".clear").show(); |
162 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".empty").hide(); |
163 | 820ef2f0 | Kostas Papadimitriou | } |
164 | 820ef2f0 | Kostas Papadimitriou | }, |
165 | 820ef2f0 | Kostas Papadimitriou | |
166 | 820ef2f0 | Kostas Papadimitriou | select_type: function(type) { |
167 | 820ef2f0 | Kostas Papadimitriou | this.selected_type = type;
|
168 | 820ef2f0 | Kostas Papadimitriou | this.types.removeClass("selected"); |
169 | 820ef2f0 | Kostas Papadimitriou | this.types.filter("#type-select-" + this.selected_type).addClass("selected"); |
170 | 820ef2f0 | Kostas Papadimitriou | |
171 | 820ef2f0 | Kostas Papadimitriou | this.reset_categories();
|
172 | 820ef2f0 | Kostas Papadimitriou | this.update_images();
|
173 | 820ef2f0 | Kostas Papadimitriou | this.reset_images();
|
174 | 820ef2f0 | Kostas Papadimitriou | this.select_image();
|
175 | 8d08f18a | Kostas Papadimitriou | }, |
176 | 8d08f18a | Kostas Papadimitriou | |
177 | 8d08f18a | Kostas Papadimitriou | select_image: function(image) { |
178 | 820ef2f0 | Kostas Papadimitriou | if (!image && this.images_ids.length) { |
179 | 820ef2f0 | Kostas Papadimitriou | if (this.selected_image && this.images_ids.indexOf(this.selected_image.id) > -1) { |
180 | 820ef2f0 | Kostas Papadimitriou | image = this.selected_image;
|
181 | 820ef2f0 | Kostas Papadimitriou | } else {
|
182 | 820ef2f0 | Kostas Papadimitriou | image = storage.images.get(this.images_ids[0]); |
183 | 820ef2f0 | Kostas Papadimitriou | } |
184 | 8d08f18a | Kostas Papadimitriou | } |
185 | 8d08f18a | Kostas Papadimitriou | |
186 | 820ef2f0 | Kostas Papadimitriou | if (!this.images_ids.length) { image = this.selected_image || undefined }; |
187 | 820ef2f0 | Kostas Papadimitriou | |
188 | 8d08f18a | Kostas Papadimitriou | this.selected_image = image;
|
189 | 820ef2f0 | Kostas Papadimitriou | this.trigger("change", image); |
190 | 8d08f18a | Kostas Papadimitriou | |
191 | 820ef2f0 | Kostas Papadimitriou | if (image) {
|
192 | 820ef2f0 | Kostas Papadimitriou | this.image_details.show();
|
193 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details").removeClass("selected"); |
194 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details#create-vm-image-" + this.selected_image.id).addClass("selected"); |
195 | 820ef2f0 | Kostas Papadimitriou | |
196 | 820ef2f0 | Kostas Papadimitriou | this.image_details_desc.text(image.get("description")); |
197 | 820ef2f0 | Kostas Papadimitriou | |
198 | 820ef2f0 | Kostas Papadimitriou | var img = snf.ui.helpers.os_icon_tag(image.get("OS")) |
199 | 820ef2f0 | Kostas Papadimitriou | this.image_details_title.html(img + image.get("name")); |
200 | 820ef2f0 | Kostas Papadimitriou | this.image_details_os.text(_(image.get("OS")).capitalize()); |
201 | 820ef2f0 | Kostas Papadimitriou | this.image_details_kernel.text(image.get("kernel")); |
202 | 820ef2f0 | Kostas Papadimitriou | |
203 | 73e25ce2 | Kostas Papadimitriou | var size = util.readablizeBytes(parseInt(image.get("size")) * 1024 * 1024); |
204 | 820ef2f0 | Kostas Papadimitriou | this.image_details_size.text(size);
|
205 | 820ef2f0 | Kostas Papadimitriou | this.image_details_gui.text(image.get("GUI")); |
206 | 820ef2f0 | Kostas Papadimitriou | |
207 | 820ef2f0 | Kostas Papadimitriou | } else {
|
208 | 820ef2f0 | Kostas Papadimitriou | this.image_details.hide();
|
209 | 820ef2f0 | Kostas Papadimitriou | } |
210 | 8d08f18a | Kostas Papadimitriou | }, |
211 | 8d08f18a | Kostas Papadimitriou | |
212 | 8d08f18a | Kostas Papadimitriou | reset_images: function() { |
213 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find("li").remove(); |
214 | 820ef2f0 | Kostas Papadimitriou | _.each(this.images, _.bind(function(img){ |
215 | 8d08f18a | Kostas Papadimitriou | this.add_image(img);
|
216 | 8d08f18a | Kostas Papadimitriou | }, this))
|
217 | 820ef2f0 | Kostas Papadimitriou | |
218 | 820ef2f0 | Kostas Papadimitriou | if (this.images.length) { |
219 | 820ef2f0 | Kostas Papadimitriou | this.images_list.parent().find(".empty").hide(); |
220 | 820ef2f0 | Kostas Papadimitriou | } else {
|
221 | 820ef2f0 | Kostas Papadimitriou | this.images_list.parent().find(".empty").show(); |
222 | 820ef2f0 | Kostas Papadimitriou | } |
223 | 8d08f18a | Kostas Papadimitriou | |
224 | 8d08f18a | Kostas Papadimitriou | this.select_image();
|
225 | 8d08f18a | Kostas Papadimitriou | |
226 | 8d08f18a | Kostas Papadimitriou | var self = this; |
227 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details").click(function(){ |
228 | 8d08f18a | Kostas Papadimitriou | self.select_image($(this).data("image")); |
229 | 820ef2f0 | Kostas Papadimitriou | }); |
230 | 820ef2f0 | Kostas Papadimitriou | |
231 | 820ef2f0 | Kostas Papadimitriou | }, |
232 | 820ef2f0 | Kostas Papadimitriou | |
233 | 820ef2f0 | Kostas Papadimitriou | show: function() { |
234 | 820ef2f0 | Kostas Papadimitriou | views.CreateImageSelectView.__super__.show.apply(this, arguments); |
235 | 8d08f18a | Kostas Papadimitriou | }, |
236 | 8d08f18a | Kostas Papadimitriou | |
237 | 8d08f18a | Kostas Papadimitriou | add_image: function(img) { |
238 | 820ef2f0 | Kostas Papadimitriou | var image = $(('<li id="create-vm-image-{1}"' + |
239 | 820ef2f0 | Kostas Papadimitriou | 'class="image-details clearfix">{2}{0}' +
|
240 | 820ef2f0 | Kostas Papadimitriou | '<p>{4}</p><span class="size">{3}' +
|
241 | 820ef2f0 | Kostas Papadimitriou | '</span></li>').format(img.get("name"), |
242 | 820ef2f0 | Kostas Papadimitriou | img.id, |
243 | 820ef2f0 | Kostas Papadimitriou | snf.ui.helpers.os_icon_tag(img.get("OS")),
|
244 | 73e25ce2 | Kostas Papadimitriou | util.readablizeBytes(parseInt(img.get("size"))* 1024 * 1024), |
245 | 820ef2f0 | Kostas Papadimitriou | util.truncate(img.get("description"),35))); |
246 | 8d08f18a | Kostas Papadimitriou | image.data("image", img);
|
247 | 8d08f18a | Kostas Papadimitriou | image.data("image_id", img.id);
|
248 | 820ef2f0 | Kostas Papadimitriou | this.images_list.append(image);
|
249 | 8d08f18a | Kostas Papadimitriou | }, |
250 | 8d08f18a | Kostas Papadimitriou | |
251 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
252 | 8d08f18a | Kostas Papadimitriou | this.selected_image = undefined; |
253 | 8d08f18a | Kostas Papadimitriou | this.reset_images();
|
254 | 8d08f18a | Kostas Papadimitriou | }, |
255 | 8d08f18a | Kostas Papadimitriou | |
256 | 8d08f18a | Kostas Papadimitriou | get: function() { |
257 | 8d08f18a | Kostas Papadimitriou | return {'image': this.selected_image}; |
258 | 8d08f18a | Kostas Papadimitriou | } |
259 | 8d08f18a | Kostas Papadimitriou | }); |
260 | 8d08f18a | Kostas Papadimitriou | |
261 | 8d08f18a | Kostas Papadimitriou | views.CreateFlavorSelectView = views.CreateVMStepView.extend({ |
262 | 8d08f18a | Kostas Papadimitriou | step: 2, |
263 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
264 | 8d08f18a | Kostas Papadimitriou | views.CreateFlavorSelectView.__super__.initialize.apply(this, arguments); |
265 | 8d08f18a | Kostas Papadimitriou | this.parent.bind("image:change", _.bind(this.handle_image_change, this)); |
266 | 8d08f18a | Kostas Papadimitriou | |
267 | 820ef2f0 | Kostas Papadimitriou | this.cpus = this.$(".flavors-cpu-list"); |
268 | 820ef2f0 | Kostas Papadimitriou | this.disks = this.$(".flavors-disk-list"); |
269 | 820ef2f0 | Kostas Papadimitriou | this.mems = this.$(".flavors-mem-list"); |
270 | 8d08f18a | Kostas Papadimitriou | |
271 | 820ef2f0 | Kostas Papadimitriou | this.predefined_flavors = SUGGESTED_FLAVORS;
|
272 | 820ef2f0 | Kostas Papadimitriou | this.predefined = this.$(".predefined-list"); |
273 | 820ef2f0 | Kostas Papadimitriou | this.update_predefined_flavors();
|
274 | 8d08f18a | Kostas Papadimitriou | }, |
275 | 8d08f18a | Kostas Papadimitriou | |
276 | 8d08f18a | Kostas Papadimitriou | handle_image_change: function(data) { |
277 | 8d08f18a | Kostas Papadimitriou | this.current_image = data;
|
278 | 820ef2f0 | Kostas Papadimitriou | this.update_valid_predefined();
|
279 | 8d08f18a | Kostas Papadimitriou | this.update_flavors_data();
|
280 | 8d08f18a | Kostas Papadimitriou | this.reset_flavors();
|
281 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
282 | 8d08f18a | Kostas Papadimitriou | }, |
283 | 8d08f18a | Kostas Papadimitriou | |
284 | 8d08f18a | Kostas Papadimitriou | reset_flavors: function() { |
285 | 8d08f18a | Kostas Papadimitriou | this.$(".flavor-opts-list .option").remove(); |
286 | 8d08f18a | Kostas Papadimitriou | this.create_flavors();
|
287 | 8d08f18a | Kostas Papadimitriou | }, |
288 | 8d08f18a | Kostas Papadimitriou | |
289 | 820ef2f0 | Kostas Papadimitriou | update_predefined_flavors: function() { |
290 | 820ef2f0 | Kostas Papadimitriou | this.predefined.find("li").remove(); |
291 | 820ef2f0 | Kostas Papadimitriou | _.each(this.predefined_flavors, _.bind(function(val, key) { |
292 | 820ef2f0 | Kostas Papadimitriou | var el = $(('<li class="predefined-selection" id="predefined-flavor-{0}">' + |
293 | 820ef2f0 | Kostas Papadimitriou | '{1}</li>').format(key, key));
|
294 | 820ef2f0 | Kostas Papadimitriou | |
295 | 820ef2f0 | Kostas Papadimitriou | this.predefined.append(el);
|
296 | 820ef2f0 | Kostas Papadimitriou | el.data({flavor: storage.flavors.get_flavor(val.cpu, val.ram, val.disk, this.flavors)}) |
297 | 820ef2f0 | Kostas Papadimitriou | el.click(_.bind(function() {
|
298 | 820ef2f0 | Kostas Papadimitriou | this.handle_predefined_click(el);
|
299 | 820ef2f0 | Kostas Papadimitriou | }, this))
|
300 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
301 | 820ef2f0 | Kostas Papadimitriou | this.update_valid_predefined();
|
302 | 820ef2f0 | Kostas Papadimitriou | }, |
303 | 820ef2f0 | Kostas Papadimitriou | |
304 | 820ef2f0 | Kostas Papadimitriou | handle_predefined_click: function(el) { |
305 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("disabled")) { return }; |
306 | 820ef2f0 | Kostas Papadimitriou | this.set_current(el.data("flavor")) |
307 | 820ef2f0 | Kostas Papadimitriou | }, |
308 | 820ef2f0 | Kostas Papadimitriou | |
309 | 820ef2f0 | Kostas Papadimitriou | update_valid_predefined: function() { |
310 | 820ef2f0 | Kostas Papadimitriou | this.update_unavailable_values();
|
311 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
312 | 820ef2f0 | Kostas Papadimitriou | this.valid_predefined = _.select(_.map(this.predefined_flavors, function(flv, key){ |
313 | 820ef2f0 | Kostas Papadimitriou | var existing = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, self.flavors);
|
314 | 820ef2f0 | Kostas Papadimitriou | // non existing
|
315 | 820ef2f0 | Kostas Papadimitriou | if (!existing) {
|
316 | 820ef2f0 | Kostas Papadimitriou | return false; |
317 | 820ef2f0 | Kostas Papadimitriou | } |
318 | 820ef2f0 | Kostas Papadimitriou | |
319 | 820ef2f0 | Kostas Papadimitriou | // not available for image
|
320 | 820ef2f0 | Kostas Papadimitriou | if (self.unavailable_values && self.unavailable_values.disk.indexOf(existing.get_disk_size()) > -1) { |
321 | 820ef2f0 | Kostas Papadimitriou | return false |
322 | 820ef2f0 | Kostas Papadimitriou | } |
323 | 820ef2f0 | Kostas Papadimitriou | |
324 | 820ef2f0 | Kostas Papadimitriou | return key;
|
325 | 820ef2f0 | Kostas Papadimitriou | }), function(ret) { return ret }); |
326 | 820ef2f0 | Kostas Papadimitriou | |
327 | 820ef2f0 | Kostas Papadimitriou | $("li.predefined-selection").addClass("disabled"); |
328 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key) { |
329 | 820ef2f0 | Kostas Papadimitriou | $("#predefined-flavor-" + key).removeClass("disabled"); |
330 | 820ef2f0 | Kostas Papadimitriou | }) |
331 | 820ef2f0 | Kostas Papadimitriou | }, |
332 | 820ef2f0 | Kostas Papadimitriou | |
333 | 820ef2f0 | Kostas Papadimitriou | update_selected_predefined: function() { |
334 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
335 | 820ef2f0 | Kostas Papadimitriou | this.predefined.find("li").removeClass("selected"); |
336 | 820ef2f0 | Kostas Papadimitriou | |
337 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key){ |
338 | 820ef2f0 | Kostas Papadimitriou | var flv = self.predefined_flavors[key];
|
339 | 820ef2f0 | Kostas Papadimitriou | var exists = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, self.flavors);
|
340 | 820ef2f0 | Kostas Papadimitriou | |
341 | 820ef2f0 | Kostas Papadimitriou | if (exists && (exists.id == self.current_flavor.id)) {
|
342 | 820ef2f0 | Kostas Papadimitriou | $("#predefined-flavor-" + key).addClass("selected"); |
343 | 820ef2f0 | Kostas Papadimitriou | } |
344 | 820ef2f0 | Kostas Papadimitriou | }) |
345 | 820ef2f0 | Kostas Papadimitriou | }, |
346 | 820ef2f0 | Kostas Papadimitriou | |
347 | 8d08f18a | Kostas Papadimitriou | update_flavors_data: function() { |
348 | 820ef2f0 | Kostas Papadimitriou | this.flavors = storage.flavors.active();
|
349 | 8d08f18a | Kostas Papadimitriou | this.flavors_data = storage.flavors.get_data(this.flavors); |
350 | 820ef2f0 | Kostas Papadimitriou | |
351 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
352 | 820ef2f0 | Kostas Papadimitriou | var set = false; |
353 | 820ef2f0 | Kostas Papadimitriou | |
354 | 820ef2f0 | Kostas Papadimitriou | // FIXME: validate current flavor
|
355 | 820ef2f0 | Kostas Papadimitriou | |
356 | 820ef2f0 | Kostas Papadimitriou | if (!this.current_flavor) { |
357 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key) { |
358 | 820ef2f0 | Kostas Papadimitriou | var flv = self.predefined_flavors[key];
|
359 | 820ef2f0 | Kostas Papadimitriou | var exists = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, self.flavors);
|
360 | 820ef2f0 | Kostas Papadimitriou | if (exists && !set) {
|
361 | 820ef2f0 | Kostas Papadimitriou | self.set_current(exists); |
362 | 820ef2f0 | Kostas Papadimitriou | set = true;
|
363 | 820ef2f0 | Kostas Papadimitriou | } |
364 | 820ef2f0 | Kostas Papadimitriou | }) |
365 | 8d08f18a | Kostas Papadimitriou | } |
366 | 820ef2f0 | Kostas Papadimitriou | |
367 | 820ef2f0 | Kostas Papadimitriou | this.update_unavailable_values();
|
368 | 8d08f18a | Kostas Papadimitriou | }, |
369 | 8d08f18a | Kostas Papadimitriou | |
370 | 820ef2f0 | Kostas Papadimitriou | update_unavailable_values: function() { |
371 | 820ef2f0 | Kostas Papadimitriou | if (!this.current_image) { this.unavailable_values = {disk:[], ram:[], cpu:[]}; return }; |
372 | 820ef2f0 | Kostas Papadimitriou | this.unavailable_values = storage.flavors.unavailable_values_for_image(this.current_image); |
373 | 820ef2f0 | Kostas Papadimitriou | }, |
374 | 820ef2f0 | Kostas Papadimitriou | |
375 | 820ef2f0 | Kostas Papadimitriou | flavor_is_valid: function(flv) { |
376 | 820ef2f0 | Kostas Papadimitriou | if (!flv) { return false }; |
377 | 820ef2f0 | Kostas Papadimitriou | var existing = storage.flavors.get_flavor(flv.get("cpu"), flv.get("ram"), flv.get("disk"), this.flavors); |
378 | 820ef2f0 | Kostas Papadimitriou | if (!existing) { return false }; |
379 | 820ef2f0 | Kostas Papadimitriou | if (this.unavailable_values && this.unavailable_values.disk.indexOf(flv.get("disk") > -1)) { |
380 | 820ef2f0 | Kostas Papadimitriou | return false |
381 | 820ef2f0 | Kostas Papadimitriou | } |
382 | 820ef2f0 | Kostas Papadimitriou | return true; |
383 | 820ef2f0 | Kostas Papadimitriou | }, |
384 | 820ef2f0 | Kostas Papadimitriou | |
385 | 8d08f18a | Kostas Papadimitriou | set_current: function(flv) { |
386 | 820ef2f0 | Kostas Papadimitriou | //console.log(flv);
|
387 | 820ef2f0 | Kostas Papadimitriou | //if (!this.flavor_is_valid(flv)) { flv = undefined };
|
388 | 820ef2f0 | Kostas Papadimitriou | |
389 | 820ef2f0 | Kostas Papadimitriou | console.log(flv); |
390 | 8d08f18a | Kostas Papadimitriou | this.current_flavor = flv;
|
391 | 8d08f18a | Kostas Papadimitriou | this.trigger("change"); |
392 | 8d08f18a | Kostas Papadimitriou | this.update_selected_flavor();
|
393 | 820ef2f0 | Kostas Papadimitriou | this.update_selected_predefined();
|
394 | 820ef2f0 | Kostas Papadimitriou | }, |
395 | 820ef2f0 | Kostas Papadimitriou | |
396 | 820ef2f0 | Kostas Papadimitriou | select_default_flavor: function() { |
397 | 820ef2f0 | Kostas Papadimitriou | |
398 | 820ef2f0 | Kostas Papadimitriou | }, |
399 | 820ef2f0 | Kostas Papadimitriou | |
400 | 820ef2f0 | Kostas Papadimitriou | update_selected_from_ui: function() { |
401 | 820ef2f0 | Kostas Papadimitriou | this.set_current(this.ui_selected()); |
402 | 820ef2f0 | Kostas Papadimitriou | }, |
403 | 820ef2f0 | Kostas Papadimitriou | |
404 | 820ef2f0 | Kostas Papadimitriou | update_disabled_flavors: function() { |
405 | 820ef2f0 | Kostas Papadimitriou | this.$(".flavor-options.disk li").removeClass("disabled"); |
406 | 820ef2f0 | Kostas Papadimitriou | if (!this.unavailable_values) { return } |
407 | 820ef2f0 | Kostas Papadimitriou | |
408 | 820ef2f0 | Kostas Papadimitriou | this.$(".flavor-options.disk li").each(_.bind(function(i, el){ |
409 | 73e25ce2 | Kostas Papadimitriou | var el_value = $(el).data("value") * 1024; |
410 | 820ef2f0 | Kostas Papadimitriou | if (this.unavailable_values.disk.indexOf(el_value) > -1) { |
411 | 820ef2f0 | Kostas Papadimitriou | $(el).addClass("disabled"); |
412 | 820ef2f0 | Kostas Papadimitriou | }; |
413 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
414 | 8d08f18a | Kostas Papadimitriou | }, |
415 | 8d08f18a | Kostas Papadimitriou | |
416 | 8d08f18a | Kostas Papadimitriou | create_flavors: function() { |
417 | 820ef2f0 | Kostas Papadimitriou | var flavors = this.get_active_flavors(); |
418 | 820ef2f0 | Kostas Papadimitriou | var valid_flavors = this.get_valid_flavors(); |
419 | 820ef2f0 | Kostas Papadimitriou | |
420 | 8d08f18a | Kostas Papadimitriou | _.each(flavors, _.bind(function(flv){
|
421 | 8d08f18a | Kostas Papadimitriou | this.add_flavor(flv);
|
422 | 8d08f18a | Kostas Papadimitriou | }, this));
|
423 | 8d08f18a | Kostas Papadimitriou | |
424 | 8d08f18a | Kostas Papadimitriou | var self = this; |
425 | 8d08f18a | Kostas Papadimitriou | this.$(".flavor-options li.option").click(function(){ |
426 | 8d08f18a | Kostas Papadimitriou | var el = $(this); |
427 | 820ef2f0 | Kostas Papadimitriou | |
428 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("disabled")) { return } |
429 | 820ef2f0 | Kostas Papadimitriou | |
430 | 8d08f18a | Kostas Papadimitriou | el.parent().find(".option").removeClass("selected"); |
431 | 8d08f18a | Kostas Papadimitriou | el.addClass("selected");
|
432 | 820ef2f0 | Kostas Papadimitriou | |
433 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("mem")) { this.last_choice = "mem" } |
434 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("cpu")) { this.last_choice = "cpu" } |
435 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("disk")) { this.last_choice = "disk" } |
436 | 820ef2f0 | Kostas Papadimitriou | |
437 | 8d08f18a | Kostas Papadimitriou | self.update_selected_from_ui(); |
438 | 8d08f18a | Kostas Papadimitriou | }) |
439 | 8d08f18a | Kostas Papadimitriou | }, |
440 | 8d08f18a | Kostas Papadimitriou | |
441 | 8d08f18a | Kostas Papadimitriou | ui_selected: function() { |
442 | 820ef2f0 | Kostas Papadimitriou | var args = [this.$(".option.cpu.selected").data("value"), |
443 | 8d08f18a | Kostas Papadimitriou | this.$(".option.mem.selected").data("value"), |
444 | 8d08f18a | Kostas Papadimitriou | this.$(".option.disk.selected").data("value"), |
445 | 8d08f18a | Kostas Papadimitriou | this.flavors];
|
446 | 8d08f18a | Kostas Papadimitriou | |
447 | 820ef2f0 | Kostas Papadimitriou | var flv = storage.flavors.get_flavor.apply(storage.flavors, args);
|
448 | 820ef2f0 | Kostas Papadimitriou | return flv;
|
449 | 8d08f18a | Kostas Papadimitriou | }, |
450 | 8d08f18a | Kostas Papadimitriou | |
451 | 8d08f18a | Kostas Papadimitriou | update_selected_flavor: function() { |
452 | 820ef2f0 | Kostas Papadimitriou | var flv = this.current_flavor; |
453 | 820ef2f0 | Kostas Papadimitriou | this.$(".option").removeClass("selected"); |
454 | 8d08f18a | Kostas Papadimitriou | |
455 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.cpu.value-" + flv.get("cpu")).addClass("selected"); |
456 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.mem.value-" + flv.get("ram")).addClass("selected"); |
457 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.disk.value-" + flv.get("disk")).addClass("selected"); |
458 | 8d08f18a | Kostas Papadimitriou | }, |
459 | 8d08f18a | Kostas Papadimitriou | |
460 | 8d08f18a | Kostas Papadimitriou | add_flavor: function(flv) { |
461 | 8d08f18a | Kostas Papadimitriou | var values = {'cpu': flv.get('cpu'), 'mem': flv.get('ram'), 'disk': flv.get('disk')}; |
462 | 820ef2f0 | Kostas Papadimitriou | |
463 | 820ef2f0 | Kostas Papadimitriou | disabled = "";
|
464 | 820ef2f0 | Kostas Papadimitriou | |
465 | 8d08f18a | Kostas Papadimitriou | if (this.$('li.option.cpu.value-{0}'.format(values.cpu)).length == 0) { |
466 | 820ef2f0 | Kostas Papadimitriou | var cpu = $(('<li class="option cpu value-{0} {1}">' + |
467 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
468 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">x</span></li>').format(values.cpu, disabled)).data('value', values.cpu); |
469 | 820ef2f0 | Kostas Papadimitriou | |
470 | 8d08f18a | Kostas Papadimitriou | this.cpus.append(cpu);
|
471 | 8d08f18a | Kostas Papadimitriou | } |
472 | 8d08f18a | Kostas Papadimitriou | if (this.$('li.option.mem.value-{0}'.format(values.mem)).length == 0) { |
473 | 820ef2f0 | Kostas Papadimitriou | var mem = $(('<li class="option mem value-{0}">' + |
474 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
475 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">MB</span></li>').format(values.mem)).data('value', values.mem); |
476 | 820ef2f0 | Kostas Papadimitriou | |
477 | 8d08f18a | Kostas Papadimitriou | this.mems.append(mem);
|
478 | 8d08f18a | Kostas Papadimitriou | } |
479 | 8d08f18a | Kostas Papadimitriou | if (this.$('li.option.disk.value-{0}'.format(values.disk)).length == 0) { |
480 | 820ef2f0 | Kostas Papadimitriou | var disk = $(('<li class="option disk value-{0}">' + |
481 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
482 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">GB</span></li>').format(values.disk)).data('value', values.disk); |
483 | 820ef2f0 | Kostas Papadimitriou | |
484 | 8d08f18a | Kostas Papadimitriou | this.disks.append(disk);
|
485 | 8d08f18a | Kostas Papadimitriou | } |
486 | 8d08f18a | Kostas Papadimitriou | |
487 | 8d08f18a | Kostas Papadimitriou | }, |
488 | 820ef2f0 | Kostas Papadimitriou | |
489 | 820ef2f0 | Kostas Papadimitriou | get_active_flavors: function() { |
490 | 820ef2f0 | Kostas Papadimitriou | return storage.flavors.active();
|
491 | 820ef2f0 | Kostas Papadimitriou | }, |
492 | 8d08f18a | Kostas Papadimitriou | |
493 | 820ef2f0 | Kostas Papadimitriou | get_valid_flavors: function() { |
494 | 8d08f18a | Kostas Papadimitriou | return this.flavors; |
495 | 8d08f18a | Kostas Papadimitriou | }, |
496 | 8d08f18a | Kostas Papadimitriou | |
497 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
498 | 820ef2f0 | Kostas Papadimitriou | this.update_selected_flavor();
|
499 | 820ef2f0 | Kostas Papadimitriou | this.update_disabled_flavors();
|
500 | 8d08f18a | Kostas Papadimitriou | }, |
501 | 8d08f18a | Kostas Papadimitriou | |
502 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
503 | 8d08f18a | Kostas Papadimitriou | this.current_image = storage.images.at(0); |
504 | 8d08f18a | Kostas Papadimitriou | this.flavors = [];
|
505 | 8d08f18a | Kostas Papadimitriou | this.flavors_data = {'cpu':[], 'mem':[], 'disk':[]}; |
506 | 8d08f18a | Kostas Papadimitriou | this.update_flavors_data();
|
507 | 8d08f18a | Kostas Papadimitriou | this.reset_flavors();
|
508 | 8d08f18a | Kostas Papadimitriou | }, |
509 | 8d08f18a | Kostas Papadimitriou | |
510 | 8d08f18a | Kostas Papadimitriou | get: function() { |
511 | 8d08f18a | Kostas Papadimitriou | return {'flavor': this.current_flavor} |
512 | 8d08f18a | Kostas Papadimitriou | } |
513 | 8d08f18a | Kostas Papadimitriou | |
514 | 8d08f18a | Kostas Papadimitriou | }); |
515 | 8d08f18a | Kostas Papadimitriou | |
516 | 8d08f18a | Kostas Papadimitriou | views.CreateSubmitView = views.CreateVMStepView.extend({ |
517 | 8d08f18a | Kostas Papadimitriou | step: 3, |
518 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
519 | 8d08f18a | Kostas Papadimitriou | views.CreateSubmitView.__super__.initialize.apply(this, arguments); |
520 | 73e25ce2 | Kostas Papadimitriou | this.roles = this.$("li.predefined-meta.role .values"); |
521 | 8d08f18a | Kostas Papadimitriou | this.confirm = this.$(".confirm-params ul"); |
522 | 73e25ce2 | Kostas Papadimitriou | this.name = this.$("input.rename-field"); |
523 | 8d08f18a | Kostas Papadimitriou | this.name_changed = false; |
524 | 73e25ce2 | Kostas Papadimitriou | this.init_suggested_roles();
|
525 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
526 | 8d08f18a | Kostas Papadimitriou | }, |
527 | 8d08f18a | Kostas Papadimitriou | |
528 | 73e25ce2 | Kostas Papadimitriou | init_suggested_roles: function() { |
529 | 73e25ce2 | Kostas Papadimitriou | var cont = this.roles; |
530 | 73e25ce2 | Kostas Papadimitriou | cont.empty(); |
531 | 73e25ce2 | Kostas Papadimitriou | |
532 | 73e25ce2 | Kostas Papadimitriou | // TODO: get suggested from snf.api.conf
|
533 | 73e25ce2 | Kostas Papadimitriou | _.each(window.SUGGESTED_ROLES, function(r){
|
534 | 73e25ce2 | Kostas Papadimitriou | var el = $('<span class="val">{0}</span>'.format(r)); |
535 | 73e25ce2 | Kostas Papadimitriou | el.data("value", r);
|
536 | 73e25ce2 | Kostas Papadimitriou | cont.append(el); |
537 | 73e25ce2 | Kostas Papadimitriou | el.click(function() {
|
538 | 73e25ce2 | Kostas Papadimitriou | $(this).parent().find(".val").removeClass("selected"); |
539 | 73e25ce2 | Kostas Papadimitriou | $(this).toggleClass("selected"); |
540 | 73e25ce2 | Kostas Papadimitriou | }) |
541 | 73e25ce2 | Kostas Papadimitriou | }) |
542 | 73e25ce2 | Kostas Papadimitriou | }, |
543 | 73e25ce2 | Kostas Papadimitriou | |
544 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
545 | 820ef2f0 | Kostas Papadimitriou | this.name.bind("keypress", _.bind(function(e) { |
546 | 8d08f18a | Kostas Papadimitriou | this.name_changed = true; |
547 | 820ef2f0 | Kostas Papadimitriou | if (e.keyCode == 13) { this.parent.submit() }; |
548 | 8d08f18a | Kostas Papadimitriou | }, this));
|
549 | 8d08f18a | Kostas Papadimitriou | |
550 | 8d08f18a | Kostas Papadimitriou | this.name.bind("click", _.bind(function() { |
551 | 8d08f18a | Kostas Papadimitriou | if (!this.name_changed) { |
552 | 8d08f18a | Kostas Papadimitriou | this.name.val(""); |
553 | 8d08f18a | Kostas Papadimitriou | } |
554 | 8d08f18a | Kostas Papadimitriou | }, this))
|
555 | 8d08f18a | Kostas Papadimitriou | }, |
556 | 8d08f18a | Kostas Papadimitriou | |
557 | 8d08f18a | Kostas Papadimitriou | show: function() { |
558 | 8d08f18a | Kostas Papadimitriou | views.CreateSubmitView.__super__.show.apply(this, arguments); |
559 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
560 | 8d08f18a | Kostas Papadimitriou | }, |
561 | 820ef2f0 | Kostas Papadimitriou | |
562 | 73e25ce2 | Kostas Papadimitriou | update_flavor_details: function() { |
563 | 73e25ce2 | Kostas Papadimitriou | var flavor = this.parent.get_params().flavor; |
564 | 73e25ce2 | Kostas Papadimitriou | |
565 | 73e25ce2 | Kostas Papadimitriou | function set_detail(sel, key) { |
566 | 73e25ce2 | Kostas Papadimitriou | var val = key;
|
567 | 73e25ce2 | Kostas Papadimitriou | if (key == undefined) { val = flavor.get(sel) }; |
568 | 73e25ce2 | Kostas Papadimitriou | this.$(".confirm-cont.flavor .flavor-" + sel + " .value").text(val) |
569 | 73e25ce2 | Kostas Papadimitriou | } |
570 | 73e25ce2 | Kostas Papadimitriou | |
571 | 73e25ce2 | Kostas Papadimitriou | set_detail("cpu");
|
572 | 73e25ce2 | Kostas Papadimitriou | set_detail("ram", flavor.get("ram") + " MB"); |
573 | 73e25ce2 | Kostas Papadimitriou | set_detail("disk", util.readablizeBytes(flavor.get("disk") * 1024 * 1024 * 1024)); |
574 | 73e25ce2 | Kostas Papadimitriou | }, |
575 | 73e25ce2 | Kostas Papadimitriou | |
576 | 820ef2f0 | Kostas Papadimitriou | update_image_details: function() { |
577 | 820ef2f0 | Kostas Papadimitriou | var image = this.parent.get_params().image; |
578 | 820ef2f0 | Kostas Papadimitriou | |
579 | 73e25ce2 | Kostas Papadimitriou | function set_detail(sel, key) { |
580 | 73e25ce2 | Kostas Papadimitriou | var val = key;
|
581 | 73e25ce2 | Kostas Papadimitriou | if (key == undefined) { val = image.get(sel) }; |
582 | 73e25ce2 | Kostas Papadimitriou | this.$(".confirm-cont.image .image-" + sel + " .value").text(val) |
583 | 820ef2f0 | Kostas Papadimitriou | } |
584 | 820ef2f0 | Kostas Papadimitriou | |
585 | 73e25ce2 | Kostas Papadimitriou | set_detail("description");
|
586 | 73e25ce2 | Kostas Papadimitriou | set_detail("name");
|
587 | 73e25ce2 | Kostas Papadimitriou | set_detail("os", image.get("OS")); |
588 | 73e25ce2 | Kostas Papadimitriou | set_detail("gui", image.get("GUI")); |
589 | 73e25ce2 | Kostas Papadimitriou | set_detail("size", util.readablizeBytes(image.get_size() * 1024 * 1024)); |
590 | 73e25ce2 | Kostas Papadimitriou | set_detail("kernel");
|
591 | 820ef2f0 | Kostas Papadimitriou | }, |
592 | 8d08f18a | Kostas Papadimitriou | |
593 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
594 | 8d08f18a | Kostas Papadimitriou | var params = this.parent.get_params(); |
595 | 820ef2f0 | Kostas Papadimitriou | |
596 | 820ef2f0 | Kostas Papadimitriou | if (!params.image) { return } |
597 | 8d08f18a | Kostas Papadimitriou | var vm_name = "My {0} server".format(params.image.get("name")); |
598 | 8d08f18a | Kostas Papadimitriou | var orig_name = vm_name;
|
599 | 8d08f18a | Kostas Papadimitriou | |
600 | 8d08f18a | Kostas Papadimitriou | var existing = true; |
601 | 8d08f18a | Kostas Papadimitriou | var j = 0; |
602 | 820ef2f0 | Kostas Papadimitriou | while (existing && !this.name_changed) { |
603 | 8d08f18a | Kostas Papadimitriou | var existing = storage.vms.select(function(vm){return vm.get("name") == vm_name}).length |
604 | 8d08f18a | Kostas Papadimitriou | if (existing) {
|
605 | 8d08f18a | Kostas Papadimitriou | j++; |
606 | 8d08f18a | Kostas Papadimitriou | vm_name = orig_name + " " + j;
|
607 | 8d08f18a | Kostas Papadimitriou | } |
608 | 8d08f18a | Kostas Papadimitriou | } |
609 | 8d08f18a | Kostas Papadimitriou | if (!_(this.name.val()).trim() || !this.name_changed) { |
610 | 8d08f18a | Kostas Papadimitriou | this.name.val(vm_name);
|
611 | 8d08f18a | Kostas Papadimitriou | } |
612 | 8d08f18a | Kostas Papadimitriou | |
613 | 8d08f18a | Kostas Papadimitriou | this.confirm.find("li.image .value").text(params.flavor.get("image")); |
614 | 60143907 | Kostas Papadimitriou | this.confirm.find("li.cpu .value").text(params.flavor.get("cpu") + "x"); |
615 | 8d08f18a | Kostas Papadimitriou | this.confirm.find("li.mem .value").text(params.flavor.get("ram")); |
616 | 8d08f18a | Kostas Papadimitriou | this.confirm.find("li.disk .value").text(params.flavor.get("disk")); |
617 | 820ef2f0 | Kostas Papadimitriou | |
618 | 820ef2f0 | Kostas Papadimitriou | if (!this.name_changed) { |
619 | 820ef2f0 | Kostas Papadimitriou | this.name.select().focus();
|
620 | 820ef2f0 | Kostas Papadimitriou | } |
621 | 820ef2f0 | Kostas Papadimitriou | |
622 | 820ef2f0 | Kostas Papadimitriou | var img = snf.ui.helpers.os_icon_path(params.image.get("OS")) |
623 | 820ef2f0 | Kostas Papadimitriou | this.name.css({backgroundImage:"url({0})".format(img)}) |
624 | 820ef2f0 | Kostas Papadimitriou | |
625 | 820ef2f0 | Kostas Papadimitriou | this.update_image_details();
|
626 | 73e25ce2 | Kostas Papadimitriou | this.update_flavor_details();
|
627 | 8d08f18a | Kostas Papadimitriou | }, |
628 | 8d08f18a | Kostas Papadimitriou | |
629 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
630 | 73e25ce2 | Kostas Papadimitriou | this.roles.find(".val").removeClass("selected"); |
631 | 820ef2f0 | Kostas Papadimitriou | this.name_changed = false; |
632 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
633 | 8d08f18a | Kostas Papadimitriou | }, |
634 | 8d08f18a | Kostas Papadimitriou | |
635 | 73e25ce2 | Kostas Papadimitriou | get_meta: function() { |
636 | 73e25ce2 | Kostas Papadimitriou | if (this.roles.find(".selected").length == 0) { |
637 | 73e25ce2 | Kostas Papadimitriou | return false; |
638 | 73e25ce2 | Kostas Papadimitriou | } |
639 | 73e25ce2 | Kostas Papadimitriou | |
640 | 73e25ce2 | Kostas Papadimitriou | var role = $(this.roles.find(".selected").get(0)).data("value"); |
641 | 73e25ce2 | Kostas Papadimitriou | return {'Role': role } |
642 | 73e25ce2 | Kostas Papadimitriou | }, |
643 | 73e25ce2 | Kostas Papadimitriou | |
644 | 8d08f18a | Kostas Papadimitriou | get: function() { |
645 | 73e25ce2 | Kostas Papadimitriou | var val = {'name': this.name.val() }; |
646 | 73e25ce2 | Kostas Papadimitriou | if (this.get_meta()) { |
647 | 73e25ce2 | Kostas Papadimitriou | val.metadata = this.get_meta();
|
648 | 73e25ce2 | Kostas Papadimitriou | } |
649 | 73e25ce2 | Kostas Papadimitriou | |
650 | 73e25ce2 | Kostas Papadimitriou | console.log(val, this.get_meta());
|
651 | 73e25ce2 | Kostas Papadimitriou | return val;
|
652 | 8d08f18a | Kostas Papadimitriou | } |
653 | 8d08f18a | Kostas Papadimitriou | }); |
654 | 8d08f18a | Kostas Papadimitriou | |
655 | 8d08f18a | Kostas Papadimitriou | views.CreateVMView = views.Overlay.extend({ |
656 | 8d08f18a | Kostas Papadimitriou | |
657 | 8d08f18a | Kostas Papadimitriou | view_id: "create_vm_view", |
658 | 8d08f18a | Kostas Papadimitriou | content_selector: "#createvm-overlay-content", |
659 | 8d08f18a | Kostas Papadimitriou | css_class: 'overlay-createvm overlay-info', |
660 | 8d08f18a | Kostas Papadimitriou | overlay_id: "metadata-overlay", |
661 | 8d08f18a | Kostas Papadimitriou | |
662 | 8d08f18a | Kostas Papadimitriou | subtitle: false, |
663 | 8d08f18a | Kostas Papadimitriou | title: "Create new machine", |
664 | 8d08f18a | Kostas Papadimitriou | |
665 | 8d08f18a | Kostas Papadimitriou | initialize: function(options) { |
666 | 8d08f18a | Kostas Papadimitriou | views.CreateVMView.__super__.initialize.apply(this);
|
667 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
668 | 8d08f18a | Kostas Papadimitriou | |
669 | 8d08f18a | Kostas Papadimitriou | this.password_view = new views.VMCreationPasswordView(); |
670 | 8d08f18a | Kostas Papadimitriou | |
671 | 8d08f18a | Kostas Papadimitriou | this.steps = [];
|
672 | 8d08f18a | Kostas Papadimitriou | this.steps[1] = new views.CreateImageSelectView(this); |
673 | 8d08f18a | Kostas Papadimitriou | this.steps[1].bind("change", _.bind(function(data) {this.trigger("image:change", data)}, this)); |
674 | 8d08f18a | Kostas Papadimitriou | |
675 | 8d08f18a | Kostas Papadimitriou | this.steps[2] = new views.CreateFlavorSelectView(this); |
676 | 8d08f18a | Kostas Papadimitriou | this.steps[3] = new views.CreateSubmitView(this); |
677 | 8d08f18a | Kostas Papadimitriou | |
678 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn = this.$(".create-controls .cancel") |
679 | 8d08f18a | Kostas Papadimitriou | this.next_btn = this.$(".create-controls .next") |
680 | 8d08f18a | Kostas Papadimitriou | this.prev_btn = this.$(".create-controls .prev") |
681 | 8d08f18a | Kostas Papadimitriou | this.submit_btn = this.$(".create-controls .submit") |
682 | 8d08f18a | Kostas Papadimitriou | |
683 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
684 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
685 | 8d08f18a | Kostas Papadimitriou | }, |
686 | 8d08f18a | Kostas Papadimitriou | |
687 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
688 | 8d08f18a | Kostas Papadimitriou | this.next_btn.click(_.bind(function(){ |
689 | 8d08f18a | Kostas Papadimitriou | this.show_step(this.current_step + 1); |
690 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
691 | 8d08f18a | Kostas Papadimitriou | }, this))
|
692 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.click(_.bind(function(){ |
693 | 8d08f18a | Kostas Papadimitriou | this.show_step(this.current_step - 1); |
694 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
695 | 8d08f18a | Kostas Papadimitriou | }, this))
|
696 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.click(_.bind(function(){ |
697 | 8d08f18a | Kostas Papadimitriou | this.close_all();
|
698 | 8d08f18a | Kostas Papadimitriou | }, this))
|
699 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.click(_.bind(function(){ |
700 | 8d08f18a | Kostas Papadimitriou | this.submit();
|
701 | 8d08f18a | Kostas Papadimitriou | }, this))
|
702 | 8d08f18a | Kostas Papadimitriou | }, |
703 | 8d08f18a | Kostas Papadimitriou | |
704 | 8d08f18a | Kostas Papadimitriou | set_step: function(st) { |
705 | 8d08f18a | Kostas Papadimitriou | }, |
706 | 8d08f18a | Kostas Papadimitriou | |
707 | 8d08f18a | Kostas Papadimitriou | validate: function(data) { |
708 | 8d08f18a | Kostas Papadimitriou | if (_(data.name).trim() == "") { |
709 | 8d08f18a | Kostas Papadimitriou | this.$(".form-field").addClass("error"); |
710 | 8d08f18a | Kostas Papadimitriou | return false; |
711 | 8d08f18a | Kostas Papadimitriou | } else {
|
712 | 8d08f18a | Kostas Papadimitriou | return true; |
713 | 8d08f18a | Kostas Papadimitriou | } |
714 | 8d08f18a | Kostas Papadimitriou | }, |
715 | 8d08f18a | Kostas Papadimitriou | |
716 | 8d08f18a | Kostas Papadimitriou | submit: function() { |
717 | 820ef2f0 | Kostas Papadimitriou | if (this.submiting) { return }; |
718 | 8d08f18a | Kostas Papadimitriou | var data = this.get_params(); |
719 | 73e25ce2 | Kostas Papadimitriou | var meta = {};
|
720 | 8d08f18a | Kostas Papadimitriou | if (this.validate(data)) { |
721 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.addClass("in-progress"); |
722 | 820ef2f0 | Kostas Papadimitriou | this.submiting = true; |
723 | 73e25ce2 | Kostas Papadimitriou | if (data.metadata) { meta = data.metadata; }
|
724 | 73e25ce2 | Kostas Papadimitriou | storage.vms.create(data.name, data.image, data.flavor, meta, {}, _.bind(function(data){
|
725 | 8d08f18a | Kostas Papadimitriou | this.close_all();
|
726 | 820ef2f0 | Kostas Papadimitriou | this.password_view.show(data.server.adminPass, data.server.id);
|
727 | 820ef2f0 | Kostas Papadimitriou | this.submiting = false; |
728 | 8d08f18a | Kostas Papadimitriou | }, this));
|
729 | 8d08f18a | Kostas Papadimitriou | } |
730 | 8d08f18a | Kostas Papadimitriou | }, |
731 | 8d08f18a | Kostas Papadimitriou | |
732 | 8d08f18a | Kostas Papadimitriou | close_all: function() { |
733 | 8d08f18a | Kostas Papadimitriou | this.hide();
|
734 | 8d08f18a | Kostas Papadimitriou | }, |
735 | 8d08f18a | Kostas Papadimitriou | |
736 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
737 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
738 | 8d08f18a | Kostas Papadimitriou | this.steps[1].reset(); |
739 | 8d08f18a | Kostas Papadimitriou | this.steps[2].reset(); |
740 | 8d08f18a | Kostas Papadimitriou | this.steps[3].reset(); |
741 | 8d08f18a | Kostas Papadimitriou | |
742 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.removeClass("in-progress"); |
743 | 8d08f18a | Kostas Papadimitriou | }, |
744 | 8d08f18a | Kostas Papadimitriou | |
745 | 8d08f18a | Kostas Papadimitriou | onShow: function() { |
746 | 8d08f18a | Kostas Papadimitriou | this.reset()
|
747 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
748 | 8d08f18a | Kostas Papadimitriou | }, |
749 | 8d08f18a | Kostas Papadimitriou | |
750 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
751 | 8d08f18a | Kostas Papadimitriou | this.show_step(this.current_step); |
752 | 8d08f18a | Kostas Papadimitriou | this.current_view.update_layout();
|
753 | 8d08f18a | Kostas Papadimitriou | }, |
754 | 8d08f18a | Kostas Papadimitriou | |
755 | 8d08f18a | Kostas Papadimitriou | beforeOpen: function() { |
756 | 820ef2f0 | Kostas Papadimitriou | this.submiting = false; |
757 | 8d08f18a | Kostas Papadimitriou | this.reset();
|
758 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
759 | 820ef2f0 | Kostas Papadimitriou | this.$(".steps-container").css({"margin-left":0 + "px"}); |
760 | 8d08f18a | Kostas Papadimitriou | this.show_step(1); |
761 | 8d08f18a | Kostas Papadimitriou | }, |
762 | 8d08f18a | Kostas Papadimitriou | |
763 | 8d08f18a | Kostas Papadimitriou | show_step: function(step) { |
764 | 8d08f18a | Kostas Papadimitriou | if (step <= 1) { |
765 | 8d08f18a | Kostas Papadimitriou | step = 1
|
766 | 8d08f18a | Kostas Papadimitriou | } |
767 | 8d08f18a | Kostas Papadimitriou | if (step > this.steps.length - 1) { |
768 | 8d08f18a | Kostas Papadimitriou | step = this.steps.length - 1; |
769 | 8d08f18a | Kostas Papadimitriou | } |
770 | 8d08f18a | Kostas Papadimitriou | |
771 | 8d08f18a | Kostas Papadimitriou | // hide other
|
772 | 820ef2f0 | Kostas Papadimitriou | //this.$(".step-header .header-step").removeClass("current").hide();
|
773 | 820ef2f0 | Kostas Papadimitriou | //this.$(".create-step-cont").hide();
|
774 | 820ef2f0 | Kostas Papadimitriou | var width = this.el.find('.container').width(); |
775 | 820ef2f0 | Kostas Papadimitriou | var left = (step -1) * width * -1; |
776 | 820ef2f0 | Kostas Papadimitriou | this.$(".steps-container").css({"margin-left":left + "px"}); |
777 | 8d08f18a | Kostas Papadimitriou | |
778 | 8d08f18a | Kostas Papadimitriou | this.steps[step].show();
|
779 | 8d08f18a | Kostas Papadimitriou | this.current_step = step;
|
780 | 8d08f18a | Kostas Papadimitriou | this.current_view = this.steps[step]; |
781 | 8d08f18a | Kostas Papadimitriou | this.update_controls();
|
782 | 8d08f18a | Kostas Papadimitriou | }, |
783 | 8d08f18a | Kostas Papadimitriou | |
784 | 8d08f18a | Kostas Papadimitriou | update_controls: function() { |
785 | 8d08f18a | Kostas Papadimitriou | var step = this.current_step; |
786 | 8d08f18a | Kostas Papadimitriou | if (step == 1) { |
787 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.hide();
|
788 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.show();
|
789 | 8d08f18a | Kostas Papadimitriou | } else {
|
790 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.show();
|
791 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.hide();
|
792 | 8d08f18a | Kostas Papadimitriou | } |
793 | 8d08f18a | Kostas Papadimitriou | |
794 | 8d08f18a | Kostas Papadimitriou | if (step == this.steps.length - 1) { |
795 | 8d08f18a | Kostas Papadimitriou | this.next_btn.hide();
|
796 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.show();
|
797 | 8d08f18a | Kostas Papadimitriou | } else {
|
798 | 8d08f18a | Kostas Papadimitriou | this.next_btn.show();
|
799 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.hide();
|
800 | 8d08f18a | Kostas Papadimitriou | } |
801 | 8d08f18a | Kostas Papadimitriou | }, |
802 | 8d08f18a | Kostas Papadimitriou | |
803 | 8d08f18a | Kostas Papadimitriou | get_params: function() { |
804 | 8d08f18a | Kostas Papadimitriou | return _.extend({}, this.steps[1].get(), this.steps[2].get(), this.steps[3].get()); |
805 | 8d08f18a | Kostas Papadimitriou | } |
806 | 8d08f18a | Kostas Papadimitriou | }); |
807 | 8d08f18a | Kostas Papadimitriou | |
808 | 8d08f18a | Kostas Papadimitriou | })(this);
|