]> git.proxmox.com Git - pve-manager.git/commitdiff
implement openvz option view/edit
authorDietmar Maurer <dietmar@proxmox.com>
Wed, 5 Oct 2011 11:23:47 +0000 (13:23 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 5 Oct 2011 11:23:47 +0000 (13:23 +0200)
PVE/API2/OpenVZ.pm
PVE/OpenVZ.pm
www/manager/Makefile
www/manager/openvz/Config.js
www/manager/openvz/Options.js [new file with mode: 0644]

index 2e84de89968488fea27d0da556c4a7b44d40839e..a6f26dc1f2d5b672c203058e949fcfb7871bc5fd 100644 (file)
@@ -372,7 +372,7 @@ __PACKAGE__->register_method({
     path => '{vmid}/config', 
     method => 'GET',
     proxyto => 'node',
-    description => "Get virtual machine configuration.",
+    description => "Get container configuration.",
     parameters => {
        additionalProperties => 0,
        properties => {
@@ -397,6 +397,10 @@ __PACKAGE__->register_method({
        # we only return selected/converted values
        my $conf = { digest => $veconf->{digest} };
 
+       if ($veconf->{ostemplate} && $veconf->{ostemplate}->{value}) {
+           $conf->{ostemplate} = $veconf->{ostemplate}->{value};
+       }
+
        my $properties = PVE::OpenVZ::json_config_properties();
 
        foreach my $k (keys %$properties) {
index 6d4a7a9dc0d05412bc3d0cd636df7ac28d2cc19b..34cc3216da6e1156e84a20071af1b04e5d63b07c 100644 (file)
@@ -74,7 +74,7 @@ sub vmstatus {
 
        my $cfspath = cfs_config_path($vmid);
        if (my $conf = PVE::Cluster::cfs_read_file($cfspath)) {
-           $d->{name} = $conf->{hostname}->{value} || "VM$vmid";
+           $d->{name} = $conf->{hostname}->{value} || "CT$vmid";
            $d->{name} =~ s/[\s]//g;
 
            $d->{cpus} = $conf->{cpus}->{value} || 1;
@@ -552,8 +552,8 @@ sub parse_res_ignore_pages {
 sub parse_boolean {
     my ($key, $text) = @_;
 
-    return { value => "yes" } if $text =~ m/^(yes|true|on|1)$/i;
-    return { value => "no" } if $text =~ m/^(no|false|off|0)$/i;
+    return { value => 1 } if $text =~ m/^(yes|true|on|1)$/i;
+    return { value => 0 } if $text =~ m/^(no|false|off|0)$/i;
 
     return undef;
 };
@@ -843,11 +843,11 @@ sub update_ovz_config {
 
        return if !defined($param->{$name});
 
-       my $newvalue = $param->{$name} ? 'yes' : 'no';
+       my $newvalue = $param->{$name} ? 1 : 0;
        my $oldvalue = $veconf->{$name}->{value};
        if (!defined($oldvalue) || ($oldvalue ne $newvalue)) {
            $veconf->{$name}->{value} = $newvalue;
-           push @$changes, "--$name", $newvalue;
+           push @$changes, "--$name", $newvalue ? 'yes' : 'no';
        }
     };
 
index 38781648d8b41cf82fe48e219410362839f69dd7..ec3203a11be566c14de48d68d7fa1f507faaa4a8 100644 (file)
@@ -84,6 +84,7 @@ JSSRC=                                                        \
        openvz/Summary.js                               \
        openvz/RessourceEdit.js                         \
        openvz/RessourceView.js                         \
+       openvz/Options.js                               \
        openvz/Config.js                                \
        openvz/CreateWizard.js                          \
        storage/ContentView.js                          \
index 4ab6a51c5049ae7f4cb39d59c12607108bfb51fb..f6e4308be0d392f1fe9a41f07d97c91d7f95953b 100644 (file)
@@ -35,7 +35,7 @@ Ext.define('PVE.openvz.Config', {
                {
                    title: 'Options',
                    itemId: 'options',
-                   html: 'OpenVZ options - not inplemented!'
+                   xtype: 'pveOpenVZOptions'
                },
                {
                    xtype: 'pveOpenVZConsole',
diff --git a/www/manager/openvz/Options.js b/www/manager/openvz/Options.js
new file mode 100644 (file)
index 0000000..7030745
--- /dev/null
@@ -0,0 +1,213 @@
+/*jslint confusion: true */
+Ext.define('PVE.openvz.Options', {
+    extend: 'PVE.grid.ObjectGrid',
+    alias: ['widget.pveOpenVZOptions'],
+
+    initComponent : function() {
+       var me = this;
+       var i;
+
+       var nodename = me.pveSelNode.data.node;
+       if (!nodename) {
+           throw "no node name specified";
+       }
+
+       var vmid = me.pveSelNode.data.vmid;
+       if (!vmid) {
+           throw "no VM ID specified";
+       }
+
+       var rows = {
+           hostname: {
+               required: true,
+               defaultValue: me.pveSelNode.data.name,
+               header: 'Hostname',
+               editor: {
+                   xtype: 'pveWindowEdit',
+                   title: 'Container Hostname',
+                   items: {
+                       xtype: 'textfield',
+                       name: 'hostname',
+                       value: '',
+                       fieldLabel: 'Hostname',
+                       allowBlank: true,
+                       emptyText: me.pveSelNode.data.name
+                   }
+               }
+           },
+           onboot: {
+               header: 'Start at boot',
+               defaultValue: '',
+               renderer: PVE.Utils.format_boolean,
+               editor: {
+                   xtype: 'pveWindowEdit',
+                   title: 'Start at boot',
+                   items: {
+                       xtype: 'pvecheckbox',
+                       name: 'onboot',
+                       uncheckedValue: 0,
+                       defaultValue: 0,
+                       fieldLabel: 'Start at boot'
+                   }
+               }
+           },
+           searchdomain: {
+               header: 'DNS domain',
+               defaultValue: '',
+               editor: {
+                   xtype: 'pveWindowEdit',
+                   title: 'DNS domain',
+                   items: {
+                       xtype: 'pvetextfield',
+                       name: 'searchdomain',
+                       fieldLabel: 'DNS domain',
+                       allowBlank: false
+                   }
+               }
+           },
+           nameserver: {
+               header: 'DNS servers',
+               defaultValue: '',
+               editor: {
+                   xtype: 'pveWindowEdit',
+                   title: 'DNS servers',
+                   items: {
+                       xtype: 'pvetextfield',
+                       name: 'nameserver',
+                       fieldLabel: 'DNS servers',
+                       allowBlank: false
+                   }
+               }
+           },
+           ostemplate: {
+               header: 'Template',
+               defaultValue: 'no set'
+           },
+           cpuunits: {
+               header: 'CPU units',
+               defaultValue: '1000',
+               editor: {
+                   xtype: 'pveWindowEdit',
+                   title: 'CPU units',
+                   items: {
+                       xtype: 'numberfield',
+                       name: 'cpuunits',
+                       fieldLabel: 'CPU units',
+                       minValue: 8,
+                       maxValue: 500000,
+                       allowBlank: false
+                   }
+               }
+           },
+           quotaugidlimit: {
+               header: 'Quota UGID limit',
+               defaultValue: '0',
+               renderer: function(value) {
+                   if (value == 0) {
+                       return 'User quotas disabled.'
+                   }
+                   return value;
+               },
+               editor: {
+                   xtype: 'pveWindowEdit',
+                   title: 'Quota UGID limit (0 to disable user quotas)',
+                   items: {
+                       xtype: 'numberfield',
+                       name: 'quotaugidlimit',
+                       fieldLabel: 'UGID limit',
+                       minValue: 0,
+                       allowBlank: false
+                   }
+               }
+           },
+           quotatime: {
+               header: 'Quota Grace period',
+               defaultValue: '0',
+               editor: {
+                   xtype: 'pveWindowEdit',
+                   title: 'Quota Grace period (seconds)',
+                   items: {
+                       xtype: 'numberfield',
+                       name: 'quotatime',
+                       minValue: 0,
+                       allowBlank: false,
+                       fieldLabel: 'Grace period'
+                   }
+               }
+           }
+       };
+
+       var baseurl = 'nodes/' + nodename + '/openvz/' + vmid + '/config';
+
+       var reload = function() {
+           me.rstore.load();
+       };
+
+       var run_editor = function() {
+           var sm = me.getSelectionModel();
+           var rec = sm.getSelection()[0];
+           if (!rec) {
+               return;
+           }
+
+           var rowdef = rows[rec.data.key];
+           if (!rowdef.editor) {
+               return;
+           }
+
+           var win;
+           if (Ext.isString(rowdef.editor)) {
+               win = Ext.create(rowdef.editor, {
+                   pveSelNode: me.pveSelNode,
+                   confid: rec.data.key,
+                   url: '/api2/extjs/' + baseurl
+               });
+           } else {
+               var config = Ext.apply({
+                   pveSelNode: me.pveSelNode,
+                   confid: rec.data.key,
+                   url: '/api2/extjs/' + baseurl
+               }, rowdef.editor);
+               win = Ext.createWidget(rowdef.editor.xtype, config);
+               win.load();
+           }
+
+           win.show();
+           win.on('destroy', reload);
+       };
+
+       var edit_btn = new Ext.Button({
+           text: 'Edit',
+           disabled: true,
+           handler: run_editor
+       });
+
+       var set_button_status = function() {
+           var sm = me.getSelectionModel();
+           var rec = sm.getSelection()[0];
+
+           if (!rec) {
+               edit_btn.disable();
+               return;
+           }
+           var rowdef = rows[rec.data.key];
+           edit_btn.setDisabled(!rowdef.editor);
+       };
+
+       Ext.applyIf(me, {
+           url: "/api2/json/nodes/" + nodename + "/openvz/" + vmid + "/config",
+           cwidth1: 150,
+           tbar: [ edit_btn ],
+           rows: rows,
+           listeners: {
+               itemdblclick: run_editor,
+               selectionchange: set_button_status
+           }
+       });
+
+       me.callParent();
+
+       me.on('show', reload);
+    }
+});
+