]> git.proxmox.com Git - pve-manager.git/commitdiff
add startup option to GUI
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 20 Apr 2012 09:49:54 +0000 (11:49 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 20 Apr 2012 09:50:27 +0000 (11:50 +0200)
www/manager/Makefile
www/manager/Parser.js
www/manager/Utils.js
www/manager/qemu/Options.js
www/manager/qemu/StartupEdit.js [new file with mode: 0644]

index ce5deb10153d772bb6908c060d087379868bd7e5..a1483d3f8aa7ceffa83a044a66d53c08ab5ebc20 100644 (file)
@@ -96,6 +96,7 @@ JSSRC=                                                        \
        qemu/DisplayEdit.js                             \
        qemu/KeyboardEdit.js                            \
        qemu/HardwareView.js                            \
+       qemu/StartupEdit.js                             \
        qemu/Options.js                                 \
        qemu/Config.js                                  \
        qemu/CreateWizard.js                            \
index bc7bafd80b1d2e77612bb40e09cd8e89d4c2baea..d1a7121c8dbc78291319ca4d1cdaf0aa6633c172 100644 (file)
@@ -185,5 +185,55 @@ Ext.define('PVE.Parser', { statics: {
        });
 
        return netarray.join(';');
+    },
+
+    parseStartup: function(value) {
+       if (value === undefined) {
+           return;
+       }
+
+       var res = {};
+
+       var errors = false;
+       Ext.Array.each(value.split(','), function(p) {
+           if (!p || p.match(/^\s*$/)) {
+               return; // continue
+           }
+
+           var match_res;
+
+           if ((match_res = p.match(/^(order)?=(\d+)$/)) !== null) {
+               res.order = match_res[2];
+           } else if ((match_res = p.match(/^up=(\d+)$/)) !== null) {
+               res.up = match_res[1];
+           } else if ((match_res = p.match(/^down=(\d+)$/)) !== null) {
+                res.down = match_res[1];
+           } else {
+               errors = true;
+               return false; // break
+           }
+       });
+
+       if (errors) {
+           return;
+       }
+
+       return res;
+    },
+    printStartup: function(startup) {
+       var arr = [];
+       if (startup.order !== undefined && startup.order !== '') {
+           arr.push('order=' + startup.order);
+       }
+       if (startup.up !== undefined && startup.up !== '') {
+           arr.push('up=' + startup.up);
+       }
+       if (startup.down !== undefined && startup.down !== '') {
+           arr.push('down=' + startup.down);
+       }
+
+       return arr.join(',');
     }
+
 }});
index da8bfa7b5f7d599ffa37c8d61aaa49cb44cf0af5..ac7e5a0fb273c337c15e6c05ca4ac44ef3b87179 100644 (file)
@@ -244,6 +244,25 @@ Ext.define('PVE.Utils', { statics: {
        return data;
     },
 
+    render_kvm_startup: function(value) {
+       var startup = PVE.Parser.parseStartup(value);
+
+       var res = 'order=';
+       if (startup.order === undefined) {
+           res += 'any';
+       } else {
+           res += startup.order;
+       }
+       if (startup.up !== undefined) {
+           res += ',up=' + startup.up;
+       }
+       if (startup.down !== undefined) {
+           res += ',down=' + startup.down;
+       }
+
+       return res;
+    },
+
     authOK: function() {
        return Ext.util.Cookies.get('PVEAuthCookie');
     },
@@ -419,7 +438,9 @@ Ext.define('PVE.Utils', { statics: {
        imgcopy: ['', gettext('Copy data') ],
        imgdel: ['', gettext('Erase data') ],
        download: ['', gettext('Download') ],
-       vzdump: ['', gettext('Backup') ]
+       vzdump: ['', gettext('Backup') ],
+       startall: [ '', gettext('Start all VMs and Containers') ],
+       stopall: [ '', gettext('Stop all VMs and Containers') ]
     },
 
     format_task_description: function(type, id) {      
index 8bc775b8eb263578d5954c940a53cf78e6287c38..c3efc6aa306316ef11edd5a974db4f7d4f8dcbec 100644 (file)
@@ -54,6 +54,13 @@ Ext.define('PVE.qemu.Options', {
                    }
                } : undefined
            },
+           startup: {
+               header: gettext('Start/Shutdown order'),
+               defaultValue: '',
+               renderer: PVE.Utils.render_kvm_startup,
+               editor: caps.vms['VM.Config.Options'] && caps.nodes['Sys.Modify'] ? 
+                   'PVE.qemu.StartupEdit' : undefined
+           },
            ostype: {
                header: 'OS Type',
                editor: caps.vms['VM.Config.Options'] ? 'PVE.qemu.OSTypeEdit' : undefined,
diff --git a/www/manager/qemu/StartupEdit.js b/www/manager/qemu/StartupEdit.js
new file mode 100644 (file)
index 0000000..30b676f
--- /dev/null
@@ -0,0 +1,85 @@
+Ext.define('PVE.qemu.StartupInputPanel', {
+    extend: 'PVE.panel.InputPanel',
+
+    onGetValues: function(values) {
+       var me = this;
+
+       var res = PVE.Parser.printStartup(values);
+
+       if (res === undefined || res === '') {
+           return { 'delete': 'startup' };
+       }
+
+       return { startup: res };
+    },
+
+    setStartup: function(value) {
+       var me = this;
+
+       var startup = PVE.Parser.parseStartup(value);
+       if (startup) {
+           console.dir(startup);
+           me.setValues(startup);
+       }
+    },
+
+    initComponent : function() {
+       var me = this;
+
+       me.items = [
+           {
+               xtype: 'textfield',
+               name: 'order',
+               defaultValue: '',
+               emptyText: 'any',
+               fieldLabel: gettext('Start order')
+           },
+           {
+               xtype: 'textfield',
+               name: 'up',
+               defaultValue: '',
+               emptyText: 'default',
+               fieldLabel: gettext('Startup delay')
+           },
+           {
+               xtype: 'textfield',
+               name: 'down',
+               defaultValue: '',
+               emptyText: 'default',
+               fieldLabel: gettext('Shutdown timeout')
+           }
+       ];
+
+       me.callParent();
+    }
+});
+
+Ext.define('PVE.qemu.StartupEdit', {
+    extend: 'PVE.window.Edit',
+
+    initComponent : function() {
+       /*jslint confusion: true */
+
+       var me = this;
+
+       var ipanel = Ext.create('PVE.qemu.StartupInputPanel', {});
+
+       Ext.applyIf(me, {
+           subject: gettext('Start/Shutdown order'),
+           fieldDefaults: {
+               labelWidth: 120
+           },
+           items: ipanel
+       });
+
+       me.callParent();
+
+       me.load({
+           success: function(response, options) {
+               var i, confid;
+               me.vmconfig = response.result.data;
+               ipanel.setStartup(me.vmconfig.startup);             
+           }
+       });
+    }
+});