root / ui / templates / machines.html @ dddb9274
History | View | Annotate | Download (30.1 kB)
1 | edda4d30 | Markos Gogoulos | {% load i18n %} |
---|---|---|---|
2 | edda4d30 | Markos Gogoulos | |
3 | 43df43aa | Markos Gogoulos | <div id="machines" class="seperator"></div> |
4 | e55b8703 | Christodoulos Psaltis | |
5 | d165dbb4 | Christodoulos Psaltis | <!-- the create button -->
|
6 | edda4d30 | Markos Gogoulos | <a id="create" rel="#wizard" href="#">{% trans "Create New +" %}</a> |
7 | d165dbb4 | Christodoulos Psaltis | |
8 | d165dbb4 | Christodoulos Psaltis | <!-- changing between standard/list view -->
|
9 | e55b8703 | Christodoulos Psaltis | <div id="view-select"> |
10 | 43df43aa | Markos Gogoulos | <a id="standard" class="current" href="/machines">#</a> |
11 | 1dd48fea | Markos Gogoulos | <span class="view-seperator">|</span> |
12 | 43df43aa | Markos Gogoulos | <a id="list" href="/machines/list">=</a> |
13 | e55b8703 | Christodoulos Psaltis | </div>
|
14 | e55b8703 | Christodoulos Psaltis | |
15 | d165dbb4 | Christodoulos Psaltis | <!-- the standard view -->
|
16 | 43df43aa | Markos Gogoulos | <div id="machinesview" class="standard"> |
17 | 38e2c5ed | Christodoulos Psaltis | <div id="spinner"></div> |
18 | c376783b | Markos Gogoulos | <div class="machine" id="machine-template" style="display:none"> |
19 | ec06b07c | Dimitris Moraitis | <div class="state"> |
20 | cf0eb36b | Markos Gogoulos | <div class="status">{% trans "Running" %}</div> |
21 | ec06b07c | Dimitris Moraitis | <div class="indicator"></div> |
22 | ec06b07c | Dimitris Moraitis | <div class="indicator"></div> |
23 | ec06b07c | Dimitris Moraitis | <div class="indicator"></div> |
24 | ec06b07c | Dimitris Moraitis | <div class="indicator"></div> |
25 | ec06b07c | Dimitris Moraitis | </div>
|
26 | c3b3043d | Dimitris Moraitis | <img class="logo" src="" /> |
27 | ec06b07c | Dimitris Moraitis | <a href="#" class="name"> |
28 | b7f8c534 | Christodoulos Psaltis | <h5>Νame: <span class="name">node.name</span><span class="rename"></span></h5> |
29 | ec06b07c | Dimitris Moraitis | </a>
|
30 | ec06b07c | Dimitris Moraitis | <a href="#" class="ip"> |
31 | ec06b07c | Dimitris Moraitis | <h5>IP: <span class="public">node.public_ip</span></h5> |
32 | ec06b07c | Dimitris Moraitis | </a>
|
33 | 5de45a61 | Christodoulos Psaltis | <h5 class="settings"> |
34 | cf0eb36b | Markos Gogoulos | {% trans "Show:" %} <a href="#">{% trans "disks" %}</a> | <a href="#">{% trans "networks" %}</a> | <a href="#">{% trans "group" %}</a> |
35 | ec06b07c | Dimitris Moraitis | </h5>
|
36 | ec06b07c | Dimitris Moraitis | <div class="actions"> |
37 | 6a94c3c4 | Christodoulos Psaltis | <a href="#" class="action-start">{% trans "Start" %}</a> |
38 | bd8b1d60 | Christodoulos Psaltis | <a href="#" class="action-reboot">{% trans "Reboot" %}</a> |
39 | bd8b1d60 | Christodoulos Psaltis | <a href="#" class="action-shutdown">{% trans "Shutdown" %}</a> |
40 | c376783b | Markos Gogoulos | <a href="#" class="more">{% trans "more …" %}</a> |
41 | ec06b07c | Dimitris Moraitis | </div>
|
42 | 5435c65a | Christodoulos Psaltis | <div class="seperator"></div> |
43 | ec06b07c | Dimitris Moraitis | </div>
|
44 | ec06b07c | Dimitris Moraitis | |
45 | 5de45a61 | Christodoulos Psaltis | <div class="running"></div> |
46 | e55b8703 | Christodoulos Psaltis | <div id="mini" class="seperator"></div> |
47 | 5de45a61 | Christodoulos Psaltis | <div class="terminated"></div> |
48 | cc7c5902 | Dimitris Moraitis | </div>
|
49 | cc7c5902 | Dimitris Moraitis | |
50 | 43df43aa | Markos Gogoulos | <div id="machines" class="seperator"></div> |
51 | e55b8703 | Christodoulos Psaltis | |
52 | cc7c5902 | Dimitris Moraitis | <!-- the form -->
|
53 | cc7c5902 | Dimitris Moraitis | <form action="#"> |
54 | cc7c5902 | Dimitris Moraitis | <!-- scrollable root element -->
|
55 | cc7c5902 | Dimitris Moraitis | <div class="modal" id="wizard"> |
56 | cc7c5902 | Dimitris Moraitis | <!-- status bar -->
|
57 | cc7c5902 | Dimitris Moraitis | <ul id="status"> |
58 | cf0eb36b | Markos Gogoulos | <li class="active"><strong>1.</strong> {% trans "Image" %}</li> |
59 | c376783b | Markos Gogoulos | <li><strong>2.</strong> {% trans "Machine" %}</li> |
60 | cf0eb36b | Markos Gogoulos | <li><strong>3.</strong> {% trans "Review" %}</li> |
61 | cc7c5902 | Dimitris Moraitis | </ul>
|
62 | cc7c5902 | Dimitris Moraitis | <!-- scrollable items -->
|
63 | cc7c5902 | Dimitris Moraitis | <div class="items"> |
64 | cc7c5902 | Dimitris Moraitis | <!-- pages -->
|
65 | cc7c5902 | Dimitris Moraitis | <div class="page"> |
66 | cf0eb36b | Markos Gogoulos | <h2>{% trans "Select an OS" %}</h2> |
67 | cc7c5902 | Dimitris Moraitis | <ul class="tabs"> |
68 | cf0eb36b | Markos Gogoulos | <li><a href="#">{% trans "standard" %}</a></li> |
69 | cf0eb36b | Markos Gogoulos | <li><a href="#">{% trans "custom" %}</a></li> |
70 | cc7c5902 | Dimitris Moraitis | </ul>
|
71 | 89976b6c | Christodoulos Psaltis | <div class="panes"> |
72 | ec06b07c | Dimitris Moraitis | <li id="image-template" style="display:none"> |
73 | ec06b07c | Dimitris Moraitis | <label for="image.id"> |
74 | ec06b07c | Dimitris Moraitis | <a><div class="image"> |
75 | c3b3043d | Dimitris Moraitis | <img src="" class="image-logo"/> |
76 | ec06b07c | Dimitris Moraitis | <strong class="image-title">image.title</strong> |
77 | ec06b07c | Dimitris Moraitis | <input class="radio" type="radio" name="image-id" id="image-id" /> |
78 | ec06b07c | Dimitris Moraitis | <br /> |
79 | ec06b07c | Dimitris Moraitis | <span class="description">image.description</span> |
80 | ec06b07c | Dimitris Moraitis | <span class="size">?? MB</span> |
81 | ec06b07c | Dimitris Moraitis | |
82 | ec06b07c | Dimitris Moraitis | </div></a> |
83 | ec06b07c | Dimitris Moraitis | </label>
|
84 | ec06b07c | Dimitris Moraitis | </li>
|
85 | ec06b07c | Dimitris Moraitis | <ul class="pane" id="standard-images"> |
86 | cc7c5902 | Dimitris Moraitis | <!-- standard images -->
|
87 | cc7c5902 | Dimitris Moraitis | </ul>
|
88 | ec06b07c | Dimitris Moraitis | <ul class="pane" id="custom-images"> |
89 | cc7c5902 | Dimitris Moraitis | <!-- custom images -->
|
90 | ec06b07c | Dimitris Moraitis | |
91 | cc7c5902 | Dimitris Moraitis | </ul>
|
92 | cc7c5902 | Dimitris Moraitis | </div>
|
93 | cf0eb36b | Markos Gogoulos | <button type="button" class="prev" id="cancel">{% trans "Cancel" %}</button> |
94 | cf0eb36b | Markos Gogoulos | <button type="button" class="next right">{% trans "Next" %} »</button> |
95 | cc7c5902 | Dimitris Moraitis | </div>
|
96 | cc7c5902 | Dimitris Moraitis | <div class="page"> |
97 | cf0eb36b | Markos Gogoulos | <h2>{% trans "Select CPU, RAM and storage" %}</h2> |
98 | cc7c5902 | Dimitris Moraitis | <ul>
|
99 | cc7c5902 | Dimitris Moraitis | <li>
|
100 | c376783b | Markos Gogoulos | <div class="machine-type"> |
101 | cc7c5902 | Dimitris Moraitis | <label for="small"> |
102 | c376783b | Markos Gogoulos | <input type="radio" id="small" name="machine-type" value="small" checked="true" /> |
103 | cf0eb36b | Markos Gogoulos | <strong>{% trans "small" %}</strong> |
104 | cc7c5902 | Dimitris Moraitis | </label>
|
105 | cc7c5902 | Dimitris Moraitis | </div>
|
106 | c376783b | Markos Gogoulos | <div class="machine-type"> |
107 | cc7c5902 | Dimitris Moraitis | <label for="medium"> |
108 | c376783b | Markos Gogoulos | <input type="radio" id="medium" name="machine-type" value="medium" /> |
109 | cf0eb36b | Markos Gogoulos | <strong>{% trans "medium" %}</strong> |
110 | cc7c5902 | Dimitris Moraitis | </label>
|
111 | cc7c5902 | Dimitris Moraitis | </div>
|
112 | c376783b | Markos Gogoulos | <div class="machine-type"> |
113 | cc7c5902 | Dimitris Moraitis | <label for="large"> |
114 | c376783b | Markos Gogoulos | <input type="radio" id="large" name="machine-type" value="large" /> |
115 | cf0eb36b | Markos Gogoulos | <strong>{% trans "large" %}</strong> |
116 | cc7c5902 | Dimitris Moraitis | </label>
|
117 | cc7c5902 | Dimitris Moraitis | </div>
|
118 | c376783b | Markos Gogoulos | <div class="machine-type"> |
119 | cc7c5902 | Dimitris Moraitis | <label for="custom"> |
120 | c376783b | Markos Gogoulos | <input type="radio" name="machine-type" id="custom" value="large" /> |
121 | cf0eb36b | Markos Gogoulos | <strong>{% trans "custom" %}</strong> |
122 | cc7c5902 | Dimitris Moraitis | </label>
|
123 | cc7c5902 | Dimitris Moraitis | </div>
|
124 | cc7c5902 | Dimitris Moraitis | </li>
|
125 | cc7c5902 | Dimitris Moraitis | <li>
|
126 | cc7c5902 | Dimitris Moraitis | <label><strong class="sliders">CPU (cores)</strong></label> |
127 | 71642965 | Dimitris Moraitis | <input type="range" id="cpu" style="display:none" /> |
128 | 71642965 | Dimitris Moraitis | <input type="text" class="range" id="cpu-indicator" /> |
129 | cc7c5902 | Dimitris Moraitis | </li>
|
130 | cc7c5902 | Dimitris Moraitis | <li>
|
131 | cc7c5902 | Dimitris Moraitis | <label><strong class="sliders">RAM (MB)</strong></label> |
132 | 71642965 | Dimitris Moraitis | <input type="range" id="ram" style="display:none" /> |
133 | 71642965 | Dimitris Moraitis | <input type="text" class="range" id="ram-indicator" /> |
134 | 71642965 | Dimitris Moraitis | |
135 | cc7c5902 | Dimitris Moraitis | </li>
|
136 | cc7c5902 | Dimitris Moraitis | <li>
|
137 | cc7c5902 | Dimitris Moraitis | <label><strong class="sliders">Storage (GB)</strong></label> |
138 | 71642965 | Dimitris Moraitis | <input type="range" id="storage" style="display:none" /> |
139 | 71642965 | Dimitris Moraitis | <input type="text" class="range" id="storage-indicator" /> |
140 | 71642965 | Dimitris Moraitis | |
141 | cc7c5902 | Dimitris Moraitis | </li>
|
142 | cc7c5902 | Dimitris Moraitis | <li>
|
143 | cc7c5902 | Dimitris Moraitis | <div class="cost"> |
144 | cf0eb36b | Markos Gogoulos | {% trans "Cost per hour:" %} 20 {% trans "credits" %} | {% trans "Credits currently in account:" %} 10.000 |
145 | cc7c5902 | Dimitris Moraitis | </div>
|
146 | cc7c5902 | Dimitris Moraitis | </li>
|
147 | cc7c5902 | Dimitris Moraitis | </ul>
|
148 | cf0eb36b | Markos Gogoulos | <button type="button" class="prev">« {% trans "Back" %}</button> |
149 | cf0eb36b | Markos Gogoulos | <button type="button" class="next right">{% trans "Next" %} »</button> |
150 | cc7c5902 | Dimitris Moraitis | </div>
|
151 | cc7c5902 | Dimitris Moraitis | <div class="page"> |
152 | cf0eb36b | Markos Gogoulos | <h2>{% trans "Confirm your settings" %}</h2> |
153 | cc7c5902 | Dimitris Moraitis | <ul>
|
154 | cc7c5902 | Dimitris Moraitis | <li class="required"> |
155 | cc7c5902 | Dimitris Moraitis | <label>
|
156 | c376783b | Markos Gogoulos | <strong>Machine name</strong> |
157 | c376783b | Markos Gogoulos | <input type="text" class="text" name="machine_name" value="My Ubuntu 10.04 x86_64 server"/> |
158 | cc7c5902 | Dimitris Moraitis | </label>
|
159 | cc7c5902 | Dimitris Moraitis | </li>
|
160 | cc7c5902 | Dimitris Moraitis | <li>
|
161 | 71642965 | Dimitris Moraitis | <strong>{% trans "Image:" %}</strong> <span id="machine_image-label">Ubuntu 10.04 x86_64 server</span> |
162 | cc7c5902 | Dimitris Moraitis | </li>
|
163 | cc7c5902 | Dimitris Moraitis | <li>
|
164 | 71642965 | Dimitris Moraitis | <strong>{% trans "CPU:" %}</strong> <span id="machine_cpu-label">2</span> <span>{% trans "cores" %}</span> |
165 | cc7c5902 | Dimitris Moraitis | </li>
|
166 | cc7c5902 | Dimitris Moraitis | <li>
|
167 | 71642965 | Dimitris Moraitis | <strong>{% trans "RAM:" %}</strong> <span id="machine_ram-label">1024</span><span>MB</span> |
168 | cc7c5902 | Dimitris Moraitis | </li>
|
169 | cc7c5902 | Dimitris Moraitis | <li>
|
170 | 71642965 | Dimitris Moraitis | <strong>{% trans "Storage:" %}</strong> <span id="machine_storage-label">10</span><span>GB</span> |
171 | cc7c5902 | Dimitris Moraitis | </li>
|
172 | cc7c5902 | Dimitris Moraitis | <li>
|
173 | cf0eb36b | Markos Gogoulos | <strong>{% trans "Cost per hour:" %}</strong> <span>20 {% trans "credits" %}</span> |
174 | cc7c5902 | Dimitris Moraitis | </li>
|
175 | cc7c5902 | Dimitris Moraitis | <li>
|
176 | cf0eb36b | Markos Gogoulos | <strong>{% trans "Remaining credits:" %}</strong> <span>10.000</span> |
177 | cc7c5902 | Dimitris Moraitis | </li>
|
178 | cc7c5902 | Dimitris Moraitis | </ul>
|
179 | cf0eb36b | Markos Gogoulos | <button type="button" class="prev">« {% trans "Back" %}</button> |
180 | cf0eb36b | Markos Gogoulos | <button type="button" class="next right" id="start">{% trans "Create VM" %}</button> |
181 | cc7c5902 | Dimitris Moraitis | </div>
|
182 | cc7c5902 | Dimitris Moraitis | </div>
|
183 | cc7c5902 | Dimitris Moraitis | </div>
|
184 | cc7c5902 | Dimitris Moraitis | </form>
|
185 | cc7c5902 | Dimitris Moraitis | |
186 | d165dbb4 | Christodoulos Psaltis | <!-- notification after wizard completion -->
|
187 | f58ec963 | Christodoulos Psaltis | <a id="notification" rel="#error-success" href="#"></a> |
188 | d165dbb4 | Christodoulos Psaltis | |
189 | f58ec963 | Christodoulos Psaltis | <div class="modal" id="error-success"> |
190 | f58ec963 | Christodoulos Psaltis | <h3>{% trans "Error!/Success!" %}</h3> |
191 | f58ec963 | Christodoulos Psaltis | <p>{% trans "More details about the result"%}</p> |
192 | cc7c5902 | Dimitris Moraitis | </div>
|
193 | cc7c5902 | Dimitris Moraitis | |
194 | bd528b3b | Christodoulos Psaltis | <!-- confirmation before executing an action -->
|
195 | f58ec963 | Christodoulos Psaltis | <a id="confirmation" rel="#yes-no" href="#"></a> |
196 | d165dbb4 | Christodoulos Psaltis | |
197 | f58ec963 | Christodoulos Psaltis | <div class="modal" id="yes-no"> |
198 | bd528b3b | Christodoulos Psaltis | <h3>{% trans "You are about to xxx machine yyy" %}</h3> |
199 | bd528b3b | Christodoulos Psaltis | <p>{% trans "Are you sure you want to proceed?" %}</p> |
200 | bd528b3b | Christodoulos Psaltis | <button>{% trans "Yes" %}</button> |
201 | bd528b3b | Christodoulos Psaltis | <button>{% trans "No" %}</button> |
202 | d165dbb4 | Christodoulos Psaltis | </div>
|
203 | d165dbb4 | Christodoulos Psaltis | |
204 | 941b00d4 | Markos Gogoulos | <script type="text/javascript"> |
205 | 941b00d4 | Markos Gogoulos | var TIMEOUT = {{timeout}};
|
206 | 941b00d4 | Markos Gogoulos | </script>
|
207 | 941b00d4 | Markos Gogoulos | |
208 | cc7c5902 | Dimitris Moraitis | <script>
|
209 | bd8b1d60 | Christodoulos Psaltis | // hardcoded image types
|
210 | ec06b07c | Dimitris Moraitis | var image_tags = {
|
211 | ec06b07c | Dimitris Moraitis | 1: 'archlinux',
|
212 | ec06b07c | Dimitris Moraitis | 2: 'centos',
|
213 | ec06b07c | Dimitris Moraitis | 3: 'debian',
|
214 | ec06b07c | Dimitris Moraitis | 4: 'freebsd',
|
215 | ec06b07c | Dimitris Moraitis | 5: 'gentoo',
|
216 | ec06b07c | Dimitris Moraitis | 6: 'netbsd',
|
217 | ec06b07c | Dimitris Moraitis | 7: 'openbsd',
|
218 | ec06b07c | Dimitris Moraitis | 8: 'redhat',
|
219 | ec06b07c | Dimitris Moraitis | 9: 'slackware',
|
220 | ec06b07c | Dimitris Moraitis | 10: 'suse',
|
221 | ec06b07c | Dimitris Moraitis | 11: 'ubuntu',
|
222 | ec06b07c | Dimitris Moraitis | 12: 'windows',
|
223 | cbec4223 | Markos Gogoulos | 20: 'ubuntu',
|
224 | ec06b07c | Dimitris Moraitis | };
|
225 | ec06b07c | Dimitris Moraitis | |
226 | bd528b3b | Christodoulos Psaltis | // ajax error checking
|
227 | f58ec963 | Christodoulos Psaltis | function ajax_error(jqXHR) {;
|
228 | f58ec963 | Christodoulos Psaltis | // prepare the error message
|
229 | dddb9274 | Markos Gogoulos | $("#error-success h3").text('{% trans "Error!" %}');
|
230 | bd96a56b | Christodoulos Psaltis | // check the error code
|
231 | bd96a56b | Christodoulos Psaltis | switch (jqXHR.status) {
|
232 | bd96a56b | Christodoulos Psaltis | case 400: // YY error/message
|
233 | dddb9274 | Markos Gogoulos | $("#error-success p").text('{% trans "A Bad Request has been made." %}');
|
234 | dddb9274 | Markos Gogoulos | break;
|
235 | dddb9274 | Markos Gogoulos | case 404: // YY error/message
|
236 | dddb9274 | Markos Gogoulos | $("#error-success p").text('{% trans "Your request has failed." %}');
|
237 | dddb9274 | Markos Gogoulos | break;
|
238 | dddb9274 | Markos Gogoulos | case 501: // XX error/message
|
239 | dddb9274 | Markos Gogoulos | $("#error-success p").text('{% trans "There has been an Internal Error. Our administrators have been notified." %}');
|
240 | dddb9274 | Markos Gogoulos | break;
|
241 | dddb9274 | Markos Gogoulos | case 503: // XX error/message
|
242 | dddb9274 | Markos Gogoulos | $("#error-success p").text('{% trans "This service is unavailble right now, please try again later." %}');
|
243 | bd96a56b | Christodoulos Psaltis | break;
|
244 | bd96a56b | Christodoulos Psaltis | default: // XXYY error/message
|
245 | dddb9274 | Markos Gogoulos | $("#error-success p").text('{% trans "An Error has happened. Our administrators have been notified." %}');
|
246 | a30a43a7 | Markos Gogoulos | }
|
247 | bd96a56b | Christodoulos Psaltis | // bring up error notification
|
248 | f58ec963 | Christodoulos Psaltis | var triggers = $("a#notification").overlay({
|
249 | 4e5d5e70 | Christodoulos Psaltis | // some mask tweaks suitable for modal dialogs
|
250 | 4e5d5e70 | Christodoulos Psaltis | mask: {
|
251 | 4e5d5e70 | Christodoulos Psaltis | color: '#ebecff',
|
252 | 4e5d5e70 | Christodoulos Psaltis | opacity: '0.9'
|
253 | 4e5d5e70 | Christodoulos Psaltis | },
|
254 | 4e5d5e70 | Christodoulos Psaltis | top: 'center',
|
255 | f58ec963 | Christodoulos Psaltis | closeOnClick: false,
|
256 | f58ec963 | Christodoulos Psaltis | oneInstance: false,
|
257 | 4e5d5e70 | Christodoulos Psaltis | load: true,
|
258 | 4e5d5e70 | Christodoulos Psaltis | onClose: function(){
|
259 | 4e5d5e70 | Christodoulos Psaltis | $("div.pane#machines-pane").load($("a#standard").attr("href"));
|
260 | 4e5d5e70 | Christodoulos Psaltis | }
|
261 | 4e5d5e70 | Christodoulos Psaltis | });
|
262 | facad27f | Christodoulos Psaltis | return false;
|
263 | bd528b3b | Christodoulos Psaltis | }
|
264 | bd528b3b | Christodoulos Psaltis | |
265 | f58ec963 | Christodoulos Psaltis | // ajax success checking
|
266 | f58ec963 | Christodoulos Psaltis | function ajax_success() {
|
267 | f58ec963 | Christodoulos Psaltis | // prepare the error message
|
268 | f58ec963 | Christodoulos Psaltis | $("#error-success h3").text('Success!');
|
269 | f58ec963 | Christodoulos Psaltis | $("#error-success p").text('Your request has been succefully executed.');
|
270 | bd96a56b | Christodoulos Psaltis | // bring up success notification
|
271 | 962733ad | Christodoulos Psaltis | var triggers = $("a#notification").overlay({
|
272 | 962733ad | Christodoulos Psaltis | // some mask tweaks suitable for modal dialogs
|
273 | 962733ad | Christodoulos Psaltis | mask: {
|
274 | 962733ad | Christodoulos Psaltis | color: '#ebecff',
|
275 | 962733ad | Christodoulos Psaltis | opacity: '0.9'
|
276 | 962733ad | Christodoulos Psaltis | },
|
277 | 962733ad | Christodoulos Psaltis | top: 'center',
|
278 | 962733ad | Christodoulos Psaltis | closeOnClick: false,
|
279 | 962733ad | Christodoulos Psaltis | oneInstance: false,
|
280 | 962733ad | Christodoulos Psaltis | load: true,
|
281 | 962733ad | Christodoulos Psaltis | onClose: function(){
|
282 | 962733ad | Christodoulos Psaltis | $("div.pane#machines-pane").load($("a#standard").attr("href"));
|
283 | 962733ad | Christodoulos Psaltis | }
|
284 | 962733ad | Christodoulos Psaltis | });
|
285 | f58ec963 | Christodoulos Psaltis | return false;
|
286 | f58ec963 | Christodoulos Psaltis | }
|
287 | f58ec963 | Christodoulos Psaltis | |
288 | f58ec963 | Christodoulos Psaltis | // confirmation overlay generation
|
289 | f58ec963 | Christodoulos Psaltis | function confirm_action(action_string, action_function, serverID, serverName) {
|
290 | f58ec963 | Christodoulos Psaltis | $("#yes-no h3").text('You are about to ' + action_string + ' vm ' + serverName);
|
291 | f58ec963 | Christodoulos Psaltis | // action confirmation overlay
|
292 | f58ec963 | Christodoulos Psaltis | var triggers = $("a#confirmation").overlay({
|
293 | f58ec963 | Christodoulos Psaltis | // some mask tweaks suitable for modal dialogs
|
294 | f58ec963 | Christodoulos Psaltis | mask: {
|
295 | f58ec963 | Christodoulos Psaltis | color: '#ebecff',
|
296 | f58ec963 | Christodoulos Psaltis | opacity: '0.9'
|
297 | f58ec963 | Christodoulos Psaltis | },
|
298 | f58ec963 | Christodoulos Psaltis | top: 'center',
|
299 | f58ec963 | Christodoulos Psaltis | load: true
|
300 | f58ec963 | Christodoulos Psaltis | });
|
301 | f58ec963 | Christodoulos Psaltis | // yes or no?
|
302 | f58ec963 | Christodoulos Psaltis | var buttons = $("#yes-no button").click(function(e) {
|
303 | f58ec963 | Christodoulos Psaltis | // get user input
|
304 | f58ec963 | Christodoulos Psaltis | var yes = buttons.index(this) === 0;
|
305 | f58ec963 | Christodoulos Psaltis | //close the confirmation window
|
306 | f58ec963 | Christodoulos Psaltis | $("a#confirmation").overlay().close();
|
307 | f58ec963 | Christodoulos Psaltis | // return true=yes or false=no
|
308 | f58ec963 | Christodoulos Psaltis | if (yes) {
|
309 | f58ec963 | Christodoulos Psaltis | action_function(serverID);
|
310 | b8bbd09f | Christodoulos Psaltis | } else {
|
311 | b8bbd09f | Christodoulos Psaltis | // reload page
|
312 | b8bbd09f | Christodoulos Psaltis | $("div.pane#machines-pane").load($("a#standard").attr("href"));
|
313 | f58ec963 | Christodoulos Psaltis | }
|
314 | f58ec963 | Christodoulos Psaltis | });
|
315 | f58ec963 | Christodoulos Psaltis | return false;
|
316 | 962733ad | Christodoulos Psaltis | }
|
317 | 962733ad | Christodoulos Psaltis | |
318 | bd528b3b | Christodoulos Psaltis | // get and show a list of running and terminated machines
|
319 | bd528b3b | Christodoulos Psaltis | function update_vms() {
|
320 | facad27f | Christodoulos Psaltis | |
321 | 1c86af5b | Christodoulos Psaltis | $(".running").text('');
|
322 | 1c86af5b | Christodoulos Psaltis | $(".terminated").text('');
|
323 | ec06b07c | Dimitris Moraitis | $("ul#standard-images").text('');
|
324 | ec06b07c | Dimitris Moraitis | $("ul#custom-images").text('');
|
325 | facad27f | Christodoulos Psaltis | |
326 | ec06b07c | Dimitris Moraitis | $.ajax({
|
327 | ec06b07c | Dimitris Moraitis | url: '/api/v1.0/servers/detail',
|
328 | ec06b07c | Dimitris Moraitis | type: "GET",
|
329 | 941b00d4 | Markos Gogoulos | timeout: TIMEOUT,
|
330 | ec06b07c | Dimitris Moraitis | dataType: "json",
|
331 | facad27f | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) {
|
332 | facad27f | Christodoulos Psaltis | ajax_error(jqXHR);
|
333 | c18611c8 | Markos Gogoulos | return false;
|
334 | facad27f | Christodoulos Psaltis | },
|
335 | facad27f | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) {
|
336 | 9ea8125a | Christodoulos Psaltis | if ($(".running a.name").length + $(".terminated a.name").length == 0) {
|
337 | fb66080c | Dimitris Moraitis |
|
338 | fb66080c | Dimitris Moraitis | $.each(data.servers, function(i,server){
|
339 | 9ea8125a | Christodoulos Psaltis | // if the machine is deleted it should not be included in any list
|
340 | 9ea8125a | Christodoulos Psaltis | if (server.status == 'DELETED') {
|
341 | a9d8ed3a | Christodoulos Psaltis | return;
|
342 | 9ea8125a | Christodoulos Psaltis | }
|
343 | fb66080c | Dimitris Moraitis | var machine = $("#machine-template").clone().attr("id", server.id).fadeIn("slow");
|
344 | fb66080c | Dimitris Moraitis | machine.find("input[type='checkbox']").attr("id", "input-" + server.id);
|
345 | fb66080c | Dimitris Moraitis | machine.find("input[type='checkbox']").attr("class", server.status);
|
346 | fb66080c | Dimitris Moraitis | machine.find("a.name span.name").text(server.name);
|
347 | fb66080c | Dimitris Moraitis | machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'.png');
|
348 | fb66080c | Dimitris Moraitis | machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'.png');
|
349 | fb66080c | Dimitris Moraitis | machine.find("img.list-logo").attr("title",image_tags[server.imageId]);
|
350 | fb66080c | Dimitris Moraitis | machine.find("span.imagetag").text(image_tags[server.imageId]);
|
351 | fb66080c | Dimitris Moraitis |
|
352 | 1cea389e | Markos Gogoulos | machine.find("a.ip span.public").text(String(server.addresses.public.ip.addr).replace(',',' '));
|
353 | fb66080c | Dimitris Moraitis |
|
354 | b9e0f667 | Dimitris Moraitis | // TODO: handle SHARE_IP, SHARE_IP_NO_CONFIG, DELETE_IP, REBUILD, QUEUE_RESIZE, PREP_RESIZE, RESIZE, VERIFY_RESIZE, PASSWORD, RESCUE
|
355 | b9e0f667 | Dimitris Moraitis | if (server.status == 'BUILD'){
|
356 | fb66080c | Dimitris Moraitis | machine.find(".status").text('Building');
|
357 | fb66080c | Dimitris Moraitis | machine.appendTo(".running");
|
358 | b9e0f667 | Dimitris Moraitis | } else if (server.status == 'ACTIVE') {
|
359 | fb66080c | Dimitris Moraitis | machine.find(".status").text('Running');
|
360 | b9e0f667 | Dimitris Moraitis | machine.appendTo(".running");
|
361 | b9e0f667 | Dimitris Moraitis | } else if (server.status == 'REBOOT' || server.status == 'HARD_REBOOT') {
|
362 | b9e0f667 | Dimitris Moraitis | machine.find(".status").text('Rebooting');
|
363 | fb66080c | Dimitris Moraitis | machine.appendTo(".running");
|
364 | 9ea8125a | Christodoulos Psaltis | } else if (server.status == 'STOPPED') {
|
365 | 9ea8125a | Christodoulos Psaltis | machine.find(".status").text('Stopped');
|
366 | 9ea8125a | Christodoulos Psaltis | machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'-off.png');
|
367 | 9ea8125a | Christodoulos Psaltis | machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'-off.png');
|
368 | 9ea8125a | Christodoulos Psaltis | machine.appendTo(".terminated");
|
369 | 9ea8125a | Christodoulos Psaltis | } else if (server.status == 'ERROR') {
|
370 | 9ea8125a | Christodoulos Psaltis | machine.find(".status").text('Error');
|
371 | fb66080c | Dimitris Moraitis | machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'-off.png');
|
372 | fb66080c | Dimitris Moraitis | machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'-off.png');
|
373 | fb66080c | Dimitris Moraitis | machine.appendTo(".terminated");
|
374 | 9ea8125a | Christodoulos Psaltis | }
|
375 | 9ea8125a | Christodoulos Psaltis | else {
|
376 | fb66080c | Dimitris Moraitis | machine.find(".status").text('Unknown');
|
377 | fb66080c | Dimitris Moraitis | machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'-off.png');
|
378 | fb66080c | Dimitris Moraitis | machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'-off.png');
|
379 | fb66080c | Dimitris Moraitis | machine.appendTo(".terminated");
|
380 | fb66080c | Dimitris Moraitis | }
|
381 | fb66080c | Dimitris Moraitis | });
|
382 | fb66080c | Dimitris Moraitis | }
|
383 | 38e2c5ed | Christodoulos Psaltis | $("#spinner").hide();
|
384 | 3d6e97af | Christodoulos Psaltis | $("div.machine:last-child").find("div.seperator").hide();
|
385 | 3d6e97af | Christodoulos Psaltis | // if the terminated list is populated then the seperator must be shown
|
386 | 3d6e97af | Christodoulos Psaltis | if ($(".terminated a.name").length > 0) {
|
387 | 3d6e97af | Christodoulos Psaltis | $("#mini.seperator").fadeIn("slow");
|
388 | 3d6e97af | Christodoulos Psaltis | }
|
389 | 008b3ae8 | Christodoulos Psaltis | // creating the table in list view, if there are machines to show
|
390 | 008b3ae8 | Christodoulos Psaltis | if ($("div.list table.list-machines tbody").length > 0) {
|
391 | 008b3ae8 | Christodoulos Psaltis | $("div.list table.list-machines").dataTable({
|
392 | a4531705 | Christodoulos Psaltis | "bInfo": false,
|
393 | a4531705 | Christodoulos Psaltis | "bPaginate": false,
|
394 | a4531705 | Christodoulos Psaltis | "bAutoWidth": false,
|
395 | bd96a56b | Christodoulos Psaltis | "bSort": true,
|
396 | bd96a56b | Christodoulos Psaltis | "bStateSave": true,
|
397 | 3a49d1da | Christodoulos Psaltis | //"sScrollY": "250px",
|
398 | 3a49d1da | Christodoulos Psaltis | //"sScrollX": "500px",
|
399 | 3a49d1da | Christodoulos Psaltis | //"sScrollXInner": "480px",
|
400 | bd96a56b | Christodoulos Psaltis | "aoColumnDefs": [
|
401 | bd96a56b | Christodoulos Psaltis | { "bSortable": false, "aTargets": [ 0 ] }
|
402 | 008b3ae8 | Christodoulos Psaltis | ]
|
403 | a4531705 | Christodoulos Psaltis | });
|
404 | 008b3ae8 | Christodoulos Psaltis | $("div.list table.list-machines").show();
|
405 | a4531705 | Christodoulos Psaltis | $("div.list div.actions").show();
|
406 | 9918dde8 | Christodoulos Psaltis | }
|
407 | ec06b07c | Dimitris Moraitis | }
|
408 | ec06b07c | Dimitris Moraitis | });
|
409 | bd528b3b | Christodoulos Psaltis | return false;
|
410 | bd528b3b | Christodoulos Psaltis | }
|
411 | ec06b07c | Dimitris Moraitis | |
412 | bd528b3b | Christodoulos Psaltis | // get and show a list of anvailable standard and custom images
|
413 | bd528b3b | Christodoulos Psaltis | function update_images() {
|
414 | ec06b07c | Dimitris Moraitis | $.ajax({
|
415 | ec06b07c | Dimitris Moraitis | url: '/api/v1.0/images/detail',
|
416 | ec06b07c | Dimitris Moraitis | type: "GET",
|
417 | 14739cd6 | Christodoulos Psaltis | //async: false,
|
418 | ec06b07c | Dimitris Moraitis | dataType: "json",
|
419 | 941b00d4 | Markos Gogoulos | timeout: TIMEOUT,
|
420 | facad27f | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) {
|
421 | facad27f | Christodoulos Psaltis | ajax_error(jqXHR);
|
422 | facad27f | Christodoulos Psaltis | },
|
423 | facad27f | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) {
|
424 | fac6fbbe | Dimitris Moraitis | if ($("ul#standard-images li").toArray().length + $("ul#custom-images li").toArray().length == 0) {
|
425 | fac6fbbe | Dimitris Moraitis | $.each(data.images, function(i,image){
|
426 | fac6fbbe | Dimitris Moraitis | var img = $('#image-template').clone().attr("id","img-"+image.id).fadeIn("slow");
|
427 | fac6fbbe | Dimitris Moraitis | img.find("label").attr('for',"img-radio-" + image.id);
|
428 | fac6fbbe | Dimitris Moraitis | img.find(".image-title").text(image.name);
|
429 | fac6fbbe | Dimitris Moraitis | img.find(".description").text(image.description);
|
430 | 93a10af1 | Markos Gogoulos | img.find(".size").text(image.size);
|
431 | fac6fbbe | Dimitris Moraitis | img.find("input.radio").attr('id',"img-radio-" + image.id);
|
432 | fac6fbbe | Dimitris Moraitis | if (i==0) img.find("input.radio").attr("checked","checked");
|
433 | fac6fbbe | Dimitris Moraitis | img.find("img.image-logo").attr('src','static/os_logos/'+image_tags[image.id]+'.png');
|
434 | fac6fbbe | Dimitris Moraitis | if (image.serverId) {
|
435 | fac6fbbe | Dimitris Moraitis | img.appendTo("ul#custom-images");
|
436 | fac6fbbe | Dimitris Moraitis | } else {
|
437 | fac6fbbe | Dimitris Moraitis | img.appendTo("ul#standard-images");
|
438 | fac6fbbe | Dimitris Moraitis | }
|
439 | fac6fbbe | Dimitris Moraitis | });
|
440 | fac6fbbe | Dimitris Moraitis | }
|
441 | ec06b07c | Dimitris Moraitis | }
|
442 | ec06b07c | Dimitris Moraitis | });
|
443 | fac6fbbe | Dimitris Moraitis | return false;
|
444 | c3b3043d | Dimitris Moraitis | }
|
445 | c3b3043d | Dimitris Moraitis | |
446 | 71642965 | Dimitris Moraitis | var flavors = {}, disks = [], cpus = [], ram = [];
|
447 | 71642965 | Dimitris Moraitis | |
448 | 71642965 | Dimitris Moraitis | Array.prototype.unique = function () {
|
449 | 71642965 | Dimitris Moraitis | var r = new Array();
|
450 | 71642965 | Dimitris Moraitis | o:for(var i = 0, n = this.length; i < n; i++)
|
451 | 71642965 | Dimitris Moraitis | {
|
452 | 71642965 | Dimitris Moraitis | for(var x = 0, y = r.length; x < y; x++)
|
453 | 71642965 | Dimitris Moraitis | {
|
454 | 71642965 | Dimitris Moraitis | if(r[x]==this[i])
|
455 | 71642965 | Dimitris Moraitis | {
|
456 | 71642965 | Dimitris Moraitis | continue o;
|
457 | 71642965 | Dimitris Moraitis | }
|
458 | 71642965 | Dimitris Moraitis | }
|
459 | 71642965 | Dimitris Moraitis | r[r.length] = this[i];
|
460 | 71642965 | Dimitris Moraitis | }
|
461 | 71642965 | Dimitris Moraitis | return r;
|
462 | 71642965 | Dimitris Moraitis | }
|
463 | 285a1fa8 | Dimitris Moraitis | |
464 | 3a49d1da | Christodoulos Psaltis | // get and configure flavor selection
|
465 | 3a49d1da | Christodoulos Psaltis | function update_flavors() {
|
466 | 3a49d1da | Christodoulos Psaltis | $.ajax({
|
467 | 3a49d1da | Christodoulos Psaltis | url: '/api/v1.0/flavors/detail',
|
468 | 3a49d1da | Christodoulos Psaltis | type: "GET",
|
469 | 3a49d1da | Christodoulos Psaltis | //async: false,
|
470 | 3a49d1da | Christodoulos Psaltis | dataType: "json",
|
471 | 3a49d1da | Christodoulos Psaltis | timeout: TIMEOUT,
|
472 | 3a49d1da | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) {
|
473 | 71642965 | Dimitris Moraitis | ajax_error(jqXHR);
|
474 | 71642965 | Dimitris Moraitis | },
|
475 | 3a49d1da | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) {
|
476 | 71642965 | Dimitris Moraitis | flavors = data.flavors;
|
477 | 71642965 | Dimitris Moraitis | $.each(flavors, function(i, flavor) {
|
478 | 71642965 | Dimitris Moraitis | cpus[i] = flavor['cpu'];
|
479 | 71642965 | Dimitris Moraitis | disks[i] = flavor['disk'];
|
480 | 71642965 | Dimitris Moraitis | ram[i] = flavor['ram'];
|
481 | 71642965 | Dimitris Moraitis | });
|
482 | 71642965 | Dimitris Moraitis | cpus = cpus.unique();
|
483 | 71642965 | Dimitris Moraitis | disks = disks.unique();
|
484 | 71642965 | Dimitris Moraitis | ram = ram.unique();
|
485 | 71642965 | Dimitris Moraitis | // sliders for selecting VM flavor
|
486 | 71642965 | Dimitris Moraitis | $("#cpu:range").rangeinput({min:0,
|
487 | 71642965 | Dimitris Moraitis | value:0,
|
488 | 71642965 | Dimitris Moraitis | step:1,
|
489 | 3a150bbe | Dimitris Moraitis | progress: true,
|
490 | 71642965 | Dimitris Moraitis | max:cpus.length-1});
|
491 | 71642965 | Dimitris Moraitis |
|
492 | 71642965 | Dimitris Moraitis | $("#storage:range").rangeinput({min:0,
|
493 | 71642965 | Dimitris Moraitis | value:0,
|
494 | 71642965 | Dimitris Moraitis | step:1,
|
495 | 3a150bbe | Dimitris Moraitis | progress: true,
|
496 | 71642965 | Dimitris Moraitis | max:disks.length-1});
|
497 | 71642965 | Dimitris Moraitis | |
498 | 71642965 | Dimitris Moraitis | $("#ram:range").rangeinput({min:0,
|
499 | 71642965 | Dimitris Moraitis | value:0,
|
500 | 71642965 | Dimitris Moraitis | step:1,
|
501 | 3a150bbe | Dimitris Moraitis | progress: true,
|
502 | 71642965 | Dimitris Moraitis | max:ram.length-1});
|
503 | 68a49035 | Dimitris Moraitis | $("#small").click();
|
504 | 68a49035 | Dimitris Moraitis | |
505 | 3a49d1da | Christodoulos Psaltis | }
|
506 | 3a49d1da | Christodoulos Psaltis | });
|
507 | 3a49d1da | Christodoulos Psaltis | return false;
|
508 | 3a49d1da | Christodoulos Psaltis | }
|
509 | 71642965 | Dimitris Moraitis | // return flavorId from cpu, disk, ram values
|
510 | 71642965 | Dimitris Moraitis | function identify_flavor(cpu, disk, ram){
|
511 | 71642965 | Dimitris Moraitis | for (i=0;i<flavors.length;i++){
|
512 | 71642965 | Dimitris Moraitis | if (flavors[i]['cpu'] == cpu && flavors[i]['disk']==disk && flavors[i]['ram']==ram) {
|
513 | 71642965 | Dimitris Moraitis | return flavors[i]['id']
|
514 | 71642965 | Dimitris Moraitis | }
|
515 | 71642965 | Dimitris Moraitis | }
|
516 | 71642965 | Dimitris Moraitis | return 0;
|
517 | 71642965 | Dimitris Moraitis | }
|
518 | 285a1fa8 | Dimitris Moraitis | |
519 | fb66080c | Dimitris Moraitis | // switch to list view
|
520 | fb66080c | Dimitris Moraitis | $("#list").click(function(){
|
521 | fac6fbbe | Dimitris Moraitis | $.cookie("list", '1'); // set list cookie
|
522 | fb66080c | Dimitris Moraitis | $("div.standard#machinesview").load($("#list").attr("href"));
|
523 | fb66080c | Dimitris Moraitis | $("a#standard")[0].className += ' activelink'
|
524 | fb66080c | Dimitris Moraitis | this.style.color = '#5f8dd3';
|
525 | bd528b3b | Christodoulos Psaltis | update_vms();
|
526 | fb66080c | Dimitris Moraitis | return false;
|
527 | fb66080c | Dimitris Moraitis | });
|
528 | fb66080c | Dimitris Moraitis | |
529 | fb66080c | Dimitris Moraitis | // switch to standard view
|
530 | fb66080c | Dimitris Moraitis | $("a#standard").click(function(){
|
531 | fb66080c | Dimitris Moraitis | $.cookie("list", '0');
|
532 | fb66080c | Dimitris Moraitis | href=$("a#standard").attr("href");
|
533 | fb66080c | Dimitris Moraitis | $("div.pane#machines-pane").load(href);
|
534 | fb66080c | Dimitris Moraitis | return false;
|
535 | fb66080c | Dimitris Moraitis | });
|
536 | fb66080c | Dimitris Moraitis | |
537 | fac6fbbe | Dimitris Moraitis | // redirect to list view if the list cookie is set
|
538 | fb66080c | Dimitris Moraitis | if ($.cookie("list") == '1') {
|
539 | fb66080c | Dimitris Moraitis | $("#list").click();
|
540 | fb66080c | Dimitris Moraitis | } else {
|
541 | fac6fbbe | Dimitris Moraitis | // execute the update function to populate the list
|
542 | bd528b3b | Christodoulos Psaltis | update_vms();
|
543 | fb66080c | Dimitris Moraitis | }
|
544 | 38e2c5ed | Christodoulos Psaltis | |
545 | bd8b1d60 | Christodoulos Psaltis | // launch VM creation wizard
|
546 | 8fd5c3a5 | Christodoulos Psaltis | $("a#create").click(function(){
|
547 | bd528b3b | Christodoulos Psaltis | // populate image list
|
548 | bd528b3b | Christodoulos Psaltis | update_images();
|
549 | 3a49d1da | Christodoulos Psaltis | // configure flavors
|
550 | 3a49d1da | Christodoulos Psaltis | update_flavors();
|
551 | bd528b3b | Christodoulos Psaltis | // launch the wizard
|
552 | bd8b1d60 | Christodoulos Psaltis | $("#wizard").scrollable().begin();
|
553 | ec06b07c | Dimitris Moraitis | });
|
554 | ec06b07c | Dimitris Moraitis | |
555 | f124656b | Christodoulos Psaltis | // create wizard overlay
|
556 | f124656b | Christodoulos Psaltis | $(function() {
|
557 | 4e5d5e70 | Christodoulos Psaltis | $("a#create").overlay({
|
558 | f124656b | Christodoulos Psaltis | mask: '#000',
|
559 | f124656b | Christodoulos Psaltis | effect: 'default',
|
560 | f124656b | Christodoulos Psaltis | top: '5%',
|
561 | f124656b | Christodoulos Psaltis | oneInstance: false,
|
562 | f124656b | Christodoulos Psaltis | closeOnClick: false
|
563 | f124656b | Christodoulos Psaltis | });
|
564 | f124656b | Christodoulos Psaltis | });
|
565 | f124656b | Christodoulos Psaltis | |
566 | bd8b1d60 | Christodoulos Psaltis | // wizard
|
567 | bd8b1d60 | Christodoulos Psaltis | $(function() {
|
568 | bd8b1d60 | Christodoulos Psaltis | var root = $("#wizard").scrollable();
|
569 | cc7c5902 | Dimitris Moraitis | |
570 | bd8b1d60 | Christodoulos Psaltis | // some variables that we need
|
571 | bd8b1d60 | Christodoulos Psaltis | var api = root.scrollable();
|
572 | cc7c5902 | Dimitris Moraitis | |
573 | bd8b1d60 | Christodoulos Psaltis | // rangeinput with default configuration
|
574 | bd8b1d60 | Christodoulos Psaltis | // validation logic is done inside the onBeforeSeek callback
|
575 | bd8b1d60 | Christodoulos Psaltis | api.onBeforeSeek(function(event, i) {
|
576 | bd8b1d60 | Christodoulos Psaltis | // we are going 1 step backwards so no need for validation
|
577 | bd8b1d60 | Christodoulos Psaltis | if (api.getIndex() < i) {
|
578 | bd8b1d60 | Christodoulos Psaltis | // 1. get current page
|
579 | bd8b1d60 | Christodoulos Psaltis | var page = root.find(".page").eq(api.getIndex()),
|
580 | bd8b1d60 | Christodoulos Psaltis | // 2. .. and all required fields inside the page
|
581 | bd8b1d60 | Christodoulos Psaltis | inputs = page.find(".required :input").removeClass("error"),
|
582 | bd8b1d60 | Christodoulos Psaltis | // 3. .. which are empty
|
583 | bd8b1d60 | Christodoulos Psaltis | empty = inputs.filter(function() {
|
584 | bd8b1d60 | Christodoulos Psaltis | return $(this).val().replace(/\s*/g, '') == '';
|
585 | bd8b1d60 | Christodoulos Psaltis | });
|
586 | bd8b1d60 | Christodoulos Psaltis | // if there are empty fields, then
|
587 | bd8b1d60 | Christodoulos Psaltis | if (empty.length) {
|
588 | bd8b1d60 | Christodoulos Psaltis | // add a CSS class name "error" for empty & required fields
|
589 | bd8b1d60 | Christodoulos Psaltis | empty.addClass("error");
|
590 | bd8b1d60 | Christodoulos Psaltis | // cancel seeking of the scrollable by returning false
|
591 | bd8b1d60 | Christodoulos Psaltis | return false;
|
592 | bd8b1d60 | Christodoulos Psaltis | // everything is good
|
593 | bd8b1d60 | Christodoulos Psaltis | }
|
594 | bd8b1d60 | Christodoulos Psaltis | }
|
595 | bd8b1d60 | Christodoulos Psaltis | // update status bar
|
596 | bd8b1d60 | Christodoulos Psaltis | $("#status li").removeClass("active").eq(i).addClass("active");
|
597 | 71642965 | Dimitris Moraitis |
|
598 | 71642965 | Dimitris Moraitis | // update confirm step
|
599 | 71642965 | Dimitris Moraitis | var image = $("input[type=radio][name=image-id]:checked");
|
600 | 71642965 | Dimitris Moraitis | var imageId = image.length ? image[0].id : false
|
601 | 71642965 | Dimitris Moraitis | if (imageId) {
|
602 | 71642965 | Dimitris Moraitis | var imageName = $("label[for=" + imageId + "] .image-title").text();
|
603 | 71642965 | Dimitris Moraitis | $("#machine_image-label")[0].textContent = imageName;
|
604 | 71642965 | Dimitris Moraitis | $("input[type=text][name=machine_name]")[0].value = "My " + imageName + " server";
|
605 | 71642965 | Dimitris Moraitis | }
|
606 | 71642965 | Dimitris Moraitis | $("#machine_cpu-label")[0].textContent = $("#cpu-indicator")[0].value;
|
607 | 71642965 | Dimitris Moraitis | $("#machine_ram-label")[0].textContent = $("#ram-indicator")[0].value;
|
608 | 71642965 | Dimitris Moraitis | $("#machine_storage-label")[0].textContent = $("#storage-indicator")[0].value;
|
609 | 71642965 | Dimitris Moraitis |
|
610 | bd8b1d60 | Christodoulos Psaltis | });
|
611 | bd8b1d60 | Christodoulos Psaltis | |
612 | bd8b1d60 | Christodoulos Psaltis | // if tab is pressed on the next button seek to next page
|
613 | bd8b1d60 | Christodoulos Psaltis | root.find("button.next").keydown(function(e) {
|
614 | bd8b1d60 | Christodoulos Psaltis | if (e.keyCode == 9) {
|
615 | bd8b1d60 | Christodoulos Psaltis | // seeks to next tab by executing our validation routine
|
616 | bd8b1d60 | Christodoulos Psaltis | api.next();
|
617 | bd8b1d60 | Christodoulos Psaltis | e.preventDefault();
|
618 | bd8b1d60 | Christodoulos Psaltis | }
|
619 | bd8b1d60 | Christodoulos Psaltis | });
|
620 | bd8b1d60 | Christodoulos Psaltis | |
621 | 71642965 | Dimitris Moraitis | });
|
622 | cc7c5902 | Dimitris Moraitis | |
623 | bd8b1d60 | Christodoulos Psaltis | // disable sliders in flavor selection
|
624 | cc7c5902 | Dimitris Moraitis | function disableSliders() {
|
625 | cc7c5902 | Dimitris Moraitis | $("#cpu").attr('disabled',true);
|
626 | cc7c5902 | Dimitris Moraitis | $("#ram").attr('disabled',true);
|
627 | cc7c5902 | Dimitris Moraitis | $("#storage").attr('disabled',true);
|
628 | cc7c5902 | Dimitris Moraitis | }
|
629 | cc7c5902 | Dimitris Moraitis | |
630 | bd8b1d60 | Christodoulos Psaltis | // selecting the small size
|
631 | 8fd5c3a5 | Christodoulos Psaltis | $("#small").click(function(){
|
632 | 71642965 | Dimitris Moraitis | $("#cpu").data('rangeinput').setValue(0);
|
633 | 71642965 | Dimitris Moraitis | $("#ram").data('rangeinput').setValue(0);
|
634 | 71642965 | Dimitris Moraitis | $("#storage").data('rangeinput').setValue(0);
|
635 | 68a49035 | Dimitris Moraitis | $("#cpu-indicator")[0].value = cpus[0];
|
636 | 68a49035 | Dimitris Moraitis | $("#ram-indicator")[0].value = ram[0];
|
637 | 68a49035 | Dimitris Moraitis | $("#storage-indicator")[0].value = disks[0];
|
638 | cc7c5902 | Dimitris Moraitis | });
|
639 | cc7c5902 | Dimitris Moraitis | |
640 | bd8b1d60 | Christodoulos Psaltis | // selecting the medium size
|
641 | 8fd5c3a5 | Christodoulos Psaltis | $("#medium").click(function(){
|
642 | 71642965 | Dimitris Moraitis | $("#cpu").data('rangeinput').setValue(1);
|
643 | 71642965 | Dimitris Moraitis | $("#ram").data('rangeinput').setValue(1);
|
644 | 71642965 | Dimitris Moraitis | $("#storage").data('rangeinput').setValue(1);
|
645 | 68a49035 | Dimitris Moraitis | $("#cpu-indicator")[0].value = cpus[1];
|
646 | 68a49035 | Dimitris Moraitis | $("#ram-indicator")[0].value = ram[1];
|
647 | 68a49035 | Dimitris Moraitis | $("#storage-indicator")[0].value = disks[1];
|
648 | cc7c5902 | Dimitris Moraitis | });
|
649 | cc7c5902 | Dimitris Moraitis | |
650 | bd8b1d60 | Christodoulos Psaltis | // selecting the large size
|
651 | 8fd5c3a5 | Christodoulos Psaltis | $("#large").click(function(){
|
652 | 71642965 | Dimitris Moraitis | $("#cpu").data('rangeinput').setValue(2);
|
653 | 71642965 | Dimitris Moraitis | $("#ram").data('rangeinput').setValue(2);
|
654 | 71642965 | Dimitris Moraitis | $("#storage").data('rangeinput').setValue(2);
|
655 | 68a49035 | Dimitris Moraitis | $("#cpu-indicator")[0].value = cpus[2];
|
656 | 68a49035 | Dimitris Moraitis | $("#ram-indicator")[0].value = ram[2];
|
657 | 68a49035 | Dimitris Moraitis | $("#storage-indicator")[0].value = disks[2];
|
658 | cc7c5902 | Dimitris Moraitis | });
|
659 | cc7c5902 | Dimitris Moraitis | |
660 | bd8b1d60 | Christodoulos Psaltis | // selecting the custom flavor enables the sliders
|
661 | 8fd5c3a5 | Christodoulos Psaltis | $("#custom").click(function(){
|
662 | bd8b1d60 | Christodoulos Psaltis | $("#cpu").attr('disabled',false);
|
663 | bd8b1d60 | Christodoulos Psaltis | $("#ram").attr('disabled',false);
|
664 | bd8b1d60 | Christodoulos Psaltis | $("#storage").attr('disabled',false);
|
665 | bd8b1d60 | Christodoulos Psaltis | $("strong.sliders").style = 'color: #778899;';
|
666 | bd8b1d60 | Christodoulos Psaltis | });
|
667 | bd8b1d60 | Christodoulos Psaltis | |
668 | bd8b1d60 | Christodoulos Psaltis | // get cpu value for custom flavor
|
669 | 71642965 | Dimitris Moraitis | $("#cpu:range").change(function(event, value){
|
670 | 68a49035 | Dimitris Moraitis | $("#custom").click();
|
671 | 68a49035 | Dimitris Moraitis | // update cpu indicator
|
672 | 71642965 | Dimitris Moraitis | $("#cpu-indicator")[0].value = cpus[Number(value)];
|
673 | 71642965 | Dimitris Moraitis | });
|
674 | 71642965 | Dimitris Moraitis | |
675 | bd8b1d60 | Christodoulos Psaltis | // get ram value for custom flavor
|
676 | 68a49035 | Dimitris Moraitis | $("#ram:range").change(function(event, value){
|
677 | bd8b1d60 | Christodoulos Psaltis | $("#custom").click();
|
678 | 68a49035 | Dimitris Moraitis | // update ram indicator
|
679 | 68a49035 | Dimitris Moraitis | $("#ram-indicator")[0].value = ram[Number(value)];
|
680 | bd8b1d60 | Christodoulos Psaltis | });
|
681 | bd8b1d60 | Christodoulos Psaltis | |
682 | bd8b1d60 | Christodoulos Psaltis | // get storage value for custom flavor
|
683 | 71642965 | Dimitris Moraitis | $("#storage:range").change(function(event, value){
|
684 | 68a49035 | Dimitris Moraitis | $("#custom").click();
|
685 | 68a49035 | Dimitris Moraitis | // update disk indicator
|
686 | 71642965 | Dimitris Moraitis | $("#storage-indicator")[0].value = disks[Number(value)];
|
687 | 71642965 | Dimitris Moraitis | return false;
|
688 | 71642965 | Dimitris Moraitis | });
|
689 | 71642965 | Dimitris Moraitis | |
690 | bd8b1d60 | Christodoulos Psaltis | // exit the wizard
|
691 | 8fd5c3a5 | Christodoulos Psaltis | $("#cancel").click(function(){
|
692 | b6270d15 | Christodoulos Psaltis | $("a#create").overlay().close();
|
693 | cc7c5902 | Dimitris Moraitis | });
|
694 | cc7c5902 | Dimitris Moraitis | |
695 | bd8b1d60 | Christodoulos Psaltis | // starting a new VM through the wizard
|
696 | 8fd5c3a5 | Christodoulos Psaltis | $("#start").click(function(){
|
697 | 285a1fa8 | Dimitris Moraitis | //TODO: get the real data
|
698 | 71642965 | Dimitris Moraitis | var flavorId = identify_flavor($("#cpu-indicator")[0].value, $("#storage-indicator")[0].value, $("#ram-indicator")[0].value);
|
699 | 285a1fa8 | Dimitris Moraitis | var payload = {
|
700 | 52bc1c74 | Markos Gogoulos | "server": {
|
701 | 52bc1c74 | Markos Gogoulos | "name": "image-name",
|
702 | 52bc1c74 | Markos Gogoulos | "imageId": 1,
|
703 | 71642965 | Dimitris Moraitis | "flavorId" : flavorId,
|
704 | 52bc1c74 | Markos Gogoulos | "metadata" : {
|
705 | 71642965 | Dimitris Moraitis | "My Server Name" : $("input[name=machine_name]")[0].value
|
706 | 52bc1c74 | Markos Gogoulos | },
|
707 | 52bc1c74 | Markos Gogoulos | }
|
708 | 285a1fa8 | Dimitris Moraitis | };
|
709 | 71642965 | Dimitris Moraitis | |
710 | 5c908a0f | Christodoulos Psaltis | $.ajax({
|
711 | 285a1fa8 | Dimitris Moraitis | url: "/api/v1.0/servers",
|
712 | 5c908a0f | Christodoulos Psaltis | type: "POST",
|
713 | 285a1fa8 | Dimitris Moraitis | dataType: "json",
|
714 | 285a1fa8 | Dimitris Moraitis | data: JSON.stringify(payload),
|
715 | debeeec9 | Markos Gogoulos | timeout: TIMEOUT,
|
716 | facad27f | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) {
|
717 | facad27f | Christodoulos Psaltis | ajax_error(jqXHR);
|
718 | b6270d15 | Christodoulos Psaltis | },
|
719 | facad27f | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) {
|
720 | f58ec963 | Christodoulos Psaltis | if ( jqXHR.status == '202') {
|
721 | debeeec9 | Markos Gogoulos | ajax_success(jqXHR);
|
722 | f58ec963 | Christodoulos Psaltis | } else {
|
723 | f58ec963 | Christodoulos Psaltis | ajax_error(jqXHR);
|
724 | 285a1fa8 | Dimitris Moraitis | }
|
725 | 285a1fa8 | Dimitris Moraitis | }
|
726 | cc7c5902 | Dimitris Moraitis | });
|
727 | 217b2431 | Dimitris Moraitis | console.warn('creating ' + $("input[name=machine_name]")[0].value)
|
728 | 285a1fa8 | Dimitris Moraitis | |
729 | ec06b07c | Dimitris Moraitis | $("#wizard").hide();
|
730 | cc7c5902 | Dimitris Moraitis | });
|
731 | cc7c5902 | Dimitris Moraitis | |
732 | 1e03328c | Christodoulos Psaltis | // reboot action
|
733 | facad27f | Christodoulos Psaltis | function reboot(serverID){
|
734 | b6270d15 | Christodoulos Psaltis | // ajax post reboot call
|
735 | 52bc1c74 | Markos Gogoulos | var payload = {
|
736 | 52bc1c74 | Markos Gogoulos | "reboot": {"type" : "HARD"}
|
737 | 52bc1c74 | Markos Gogoulos | };
|
738 | 52bc1c74 | Markos Gogoulos | |
739 | facad27f | Christodoulos Psaltis | $.ajax({
|
740 | facad27f | Christodoulos Psaltis | url: '/api/v1.0/servers/' + serverID + '/action',
|
741 | 52bc1c74 | Markos Gogoulos | type: "POST",
|
742 | facad27f | Christodoulos Psaltis | dataType: "json",
|
743 | 52bc1c74 | Markos Gogoulos | data: JSON.stringify(payload),
|
744 | facad27f | Christodoulos Psaltis | timeout: TIMEOUT,
|
745 | facad27f | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) {
|
746 | facad27f | Christodoulos Psaltis | ajax_error(jqXHR);
|
747 | facad27f | Christodoulos Psaltis | },
|
748 | facad27f | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) {
|
749 | facad27f | Christodoulos Psaltis | if ( jqXHR.status == '202') {
|
750 | ba4c763b | Christodoulos Psaltis | ajax_success(jqXHR);
|
751 | facad27f | Christodoulos Psaltis | } else {
|
752 | facad27f | Christodoulos Psaltis | ajax_error(jqXHR);
|
753 | facad27f | Christodoulos Psaltis | }}
|
754 | facad27f | Christodoulos Psaltis | });
|
755 | 217b2431 | Dimitris Moraitis | console.warn('rebooting ' + serverID);
|
756 | fac6fbbe | Dimitris Moraitis | return false;
|
757 | fac6fbbe | Dimitris Moraitis | }
|
758 | 8400e1a5 | Markos Gogoulos | |
759 | 1e03328c | Christodoulos Psaltis | // shutdown action
|
760 | facad27f | Christodoulos Psaltis | function shutdown(serverID) {
|
761 | b6270d15 | Christodoulos Psaltis | // ajax post shutdown call
|
762 | 52bc1c74 | Markos Gogoulos | var payload = {
|
763 | 52bc1c74 | Markos Gogoulos | "shutdown": {"timeout" : "5"}
|
764 | 52bc1c74 | Markos Gogoulos | };
|
765 | 52bc1c74 | Markos Gogoulos | |
766 | facad27f | Christodoulos Psaltis | $.ajax({
|
767 | facad27f | Christodoulos Psaltis | url: '/api/v1.0/servers/' + serverID + '/action',
|
768 | facad27f | Christodoulos Psaltis | type: "POST",
|
769 | facad27f | Christodoulos Psaltis | dataType: "json",
|
770 | 52bc1c74 | Markos Gogoulos | data: JSON.stringify(payload),
|
771 | facad27f | Christodoulos Psaltis | timeout: TIMEOUT,
|
772 | facad27f | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) {
|
773 | facad27f | Christodoulos Psaltis | ajax_error(jqXHR);
|
774 | facad27f | Christodoulos Psaltis | },
|
775 | facad27f | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) {
|
776 | facad27f | Christodoulos Psaltis | if ( jqXHR.status == '202') {
|
777 | ba4c763b | Christodoulos Psaltis | ajax_success(jqXHR);
|
778 | facad27f | Christodoulos Psaltis | } else {
|
779 | facad27f | Christodoulos Psaltis | ajax_error(jqXHR);
|
780 | facad27f | Christodoulos Psaltis | }}
|
781 | facad27f | Christodoulos Psaltis | });
|
782 | 217b2431 | Dimitris Moraitis | console.warn('shutting down ' + serverID);
|
783 | fac6fbbe | Dimitris Moraitis | return false;
|
784 | fac6fbbe | Dimitris Moraitis | }
|
785 | fac6fbbe | Dimitris Moraitis | |
786 | e98852ba | Markos Gogoulos | |
787 | 9eef701d | Markos Gogoulos | // start action
|
788 | e98852ba | Markos Gogoulos | function start(serverID){
|
789 | e98852ba | Markos Gogoulos | // ajax post start call
|
790 | 52bc1c74 | Markos Gogoulos | var payload = {
|
791 | 52bc1c74 | Markos Gogoulos | "start": {"type" : "NORMAL"}
|
792 | 52bc1c74 | Markos Gogoulos | };
|
793 | 52bc1c74 | Markos Gogoulos | |
794 | e98852ba | Markos Gogoulos | $.ajax({
|
795 | e98852ba | Markos Gogoulos | url: '/api/v1.0/servers/' + serverID + '/action',
|
796 | e98852ba | Markos Gogoulos | type: "POST",
|
797 | e98852ba | Markos Gogoulos | dataType: "json",
|
798 | 52bc1c74 | Markos Gogoulos | data: JSON.stringify(payload),
|
799 | e98852ba | Markos Gogoulos | timeout: TIMEOUT,
|
800 | e98852ba | Markos Gogoulos | error: function(jqXHR, textStatus, errorThrown) {
|
801 | e98852ba | Markos Gogoulos | ajax_error(jqXHR);
|
802 | e98852ba | Markos Gogoulos | },
|
803 | e98852ba | Markos Gogoulos | success: function(data, textStatus, jqXHR) {
|
804 | e98852ba | Markos Gogoulos | if ( jqXHR.status == '202') {
|
805 | e98852ba | Markos Gogoulos | ajax_success(jqXHR);
|
806 | e98852ba | Markos Gogoulos | } else {
|
807 | e98852ba | Markos Gogoulos | ajax_error(jqXHR);
|
808 | e98852ba | Markos Gogoulos | }}
|
809 | e98852ba | Markos Gogoulos | });
|
810 | 217b2431 | Dimitris Moraitis | console.warn('starting ' + serverID);
|
811 | e98852ba | Markos Gogoulos | return false;
|
812 | e98852ba | Markos Gogoulos | }
|
813 | e98852ba | Markos Gogoulos | |
814 | e98852ba | Markos Gogoulos | |
815 | bd528b3b | Christodoulos Psaltis | // basic functions executed on page load
|
816 | bd528b3b | Christodoulos Psaltis | |
817 | bd528b3b | Christodoulos Psaltis | // create tabs for main menu
|
818 | bd528b3b | Christodoulos Psaltis | $("ul.tabs").tabs("div.panes ul");
|
819 | bd528b3b | Christodoulos Psaltis | |
820 | b6270d15 | Christodoulos Psaltis | // intercept reboot click
|
821 | facad27f | Christodoulos Psaltis | $("div.actions a.action-reboot").live('click', function(){
|
822 | facad27f | Christodoulos Psaltis | var serverID = $(this).parent().parent().attr("id");
|
823 | facad27f | Christodoulos Psaltis | var serverName = $(this).parent().prevAll("a.name").find("span.name").text();
|
824 | facad27f | Christodoulos Psaltis | confirm_action('reboot', reboot, serverID, serverName);
|
825 | facad27f | Christodoulos Psaltis | return false;
|
826 | facad27f | Christodoulos Psaltis | });
|
827 | facad27f | Christodoulos Psaltis | |
828 | b6270d15 | Christodoulos Psaltis | // intercept shutdown click
|
829 | facad27f | Christodoulos Psaltis | $("div.actions a.action-shutdown").live('click', function(){
|
830 | facad27f | Christodoulos Psaltis | var serverID = $(this).parent().parent().attr("id");
|
831 | facad27f | Christodoulos Psaltis | var serverName = $(this).parent().prevAll("a.name").find("span.name").text();
|
832 | f58ec963 | Christodoulos Psaltis | confirm_action('shutdown', shutdown, serverID, serverName);
|
833 | facad27f | Christodoulos Psaltis | return false;
|
834 | facad27f | Christodoulos Psaltis | });
|
835 | e98852ba | Markos Gogoulos | // intercept start click
|
836 | e98852ba | Markos Gogoulos | $("div.actions a.action-start").live('click', function(){
|
837 | e98852ba | Markos Gogoulos | var serverID = $(this).parent().parent().attr("id");
|
838 | e98852ba | Markos Gogoulos | var serverName = $(this).parent().prevAll("a.name").find("span.name").text();
|
839 | e98852ba | Markos Gogoulos | confirm_action('start', start, serverID, serverName);
|
840 | e98852ba | Markos Gogoulos | return false;
|
841 | e98852ba | Markos Gogoulos | });
|
842 | 8400e1a5 | Markos Gogoulos | </script> |