[pve-devel] applied: Re: [PATCH manager 2/2] use RealmCombobox from widget-toolkit

2020-05-22 Thread Thomas Lamprecht
On 5/19/20 4:48 PM, Dominik Csapak wrote:
> Signed-off-by: Dominik Csapak 
> ---
>  www/manager6/dc/UserEdit.js | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
>

applied, thanks!

___
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


[pve-devel] applied: Re: [PATCH manager 1/2] ui: use RoleSelector from widget-toolkit

2020-05-22 Thread Thomas Lamprecht
On 5/19/20 4:48 PM, Dominik Csapak wrote:
> Signed-off-by: Dominik Csapak 
> ---
>  www/manager6/Makefile |  1 -
>  www/manager6/dc/ACLView.js|  2 +-
>  www/manager6/form/RoleSelector.js | 50 ---
>  3 files changed, 1 insertion(+), 52 deletions(-)
>  delete mode 100644 www/manager6/form/RoleSelector.js
> 
>

applied, thanks!

___
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


[pve-devel] [RFC manager 2/2] hardware view: Add disk import button

2020-05-22 Thread Dominic Jäger
Is it a bad idea to move column2 as I did here? Seems strange to have column1
and 2 so different but I haven't found an easier way to make it available to
the subclass yet.

@Thomas Is this sort of what you had in mind for this feature?

Signed-off-by: Dominic Jäger 
---
 www/manager6/Makefile|   1 +
 www/manager6/form/DiskStorageSelector.js |   5 +
 www/manager6/qemu/HDEdit.js  |  50 +
 www/manager6/qemu/HDImport.js| 128 +++
 www/manager6/qemu/HardwareView.js|  13 +++
 5 files changed, 176 insertions(+), 21 deletions(-)
 create mode 100644 www/manager6/qemu/HDImport.js

diff --git a/www/manager6/Makefile b/www/manager6/Makefile
index a29e280d..c1645748 100644
--- a/www/manager6/Makefile
+++ b/www/manager6/Makefile
@@ -143,6 +143,7 @@ JSSRC=  
\
qemu/Smbios1Edit.js \
qemu/CDEdit.js  \
qemu/HDEdit.js  \
+   qemu/HDImport.js\
qemu/HDResize.js\
qemu/HDMove.js  \
qemu/HDEfi.js   \
diff --git a/www/manager6/form/DiskStorageSelector.js 
b/www/manager6/form/DiskStorageSelector.js
index 445e3ac0..2c1555e1 100644
--- a/www/manager6/form/DiskStorageSelector.js
+++ b/www/manager6/form/DiskStorageSelector.js
@@ -32,6 +32,11 @@ Ext.define('PVE.form.DiskStorageSelector', {
 // string because else we get a type confusion
 defaultSize: '32',
 
+setDiskSize: function(newSize) {
+   let field = this.getComponent('disksize');
+   field.setValue(newSize);
+},
+
 changeStorage: function(f, value) {
var me = this;
var formatsel = me.getComponent('diskformat');
diff --git a/www/manager6/qemu/HDEdit.js b/www/manager6/qemu/HDEdit.js
index fd890600..5d6c12e9 100644
--- a/www/manager6/qemu/HDEdit.js
+++ b/www/manager6/qemu/HDEdit.js
@@ -13,6 +13,28 @@ Ext.define('PVE.qemu.HDInputPanel', {
 
 viewModel: {},
 
+diskStorageSelector: {
+   xtype: 'pveDiskStorageSelector',
+   storageContent: 'images',
+   name: 'disk',
+   reference: 'storageSelector',
+},
+
+column2: [
+   {
+   xtype: 'CacheTypeSelector',
+   name: 'cache',
+   value: '__default__',
+   fieldLabel: gettext('Cache')
+   },
+   {
+   xtype: 'proxmoxcheckbox',
+   fieldLabel: gettext('Discard'),
+   reference: 'discard',
+   name: 'discard'
+   },
+],
+
 controller: {
 
xclass: 'Ext.app.ViewController',
@@ -164,7 +186,6 @@ Ext.define('PVE.qemu.HDInputPanel', {
me.drive = {};
 
me.column1 = [];
-   me.column2 = [];
 
me.advancedColumn1 = [];
me.advancedColumn2 = [];
@@ -188,6 +209,8 @@ Ext.define('PVE.qemu.HDInputPanel', {
me.column1.push(me.scsiController);
}
 
+   me.diskStorageSelector.nodename = me.nodename;
+   me.diskStorageSelector.autoSelect = me.insideWizard;
if (me.unused) {
me.unusedDisks = Ext.create('Proxmox.form.KVComboBox', {
name: 'unusedId',
@@ -201,13 +224,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
});
me.column1.push(me.unusedDisks);
} else if (me.isCreate) {
-   me.column1.push({
-   xtype: 'pveDiskStorageSelector',
-   storageContent: 'images',
-   name: 'disk',
-   nodename: me.nodename,
-   autoSelect: me.insideWizard
-   });
+   me.column1.push(me.diskStorageSelector);
} else {
me.column1.push({
xtype: 'textfield',
@@ -219,18 +236,6 @@ Ext.define('PVE.qemu.HDInputPanel', {
}
 
me.column2.push(
-   {
-   xtype: 'CacheTypeSelector',
-   name: 'cache',
-   value: '__default__',
-   fieldLabel: gettext('Cache')
-   },
-   {
-   xtype: 'proxmoxcheckbox',
-   fieldLabel: gettext('Discard'),
-   reference: 'discard',
-   name: 'discard'
-   }
);
 
me.advancedColumn1.push(
@@ -358,7 +363,9 @@ Ext.define('PVE.qemu.HDEdit', {
 
 backgroundDelay: 5,
 
-initComponent : function() {
+isImport: false,
+
+initComponent: function() {
var me = this;
 
var nodename = me.pveSelNode.data.node;
@@ -374,6 +381,7 @@ Ext.define('PVE.qemu.HDEdit', {
confid: me.confid,
nodename: nodename,
unused: unused,
+   isImport: me.isImport,
isCreate: me.isCreate
});
 
diff --git a/www/manager6/qemu/HDImport.js b/www/manager6/qemu/HDImport.js
new file mode 100644

[pve-devel] [RFC qemu-server 1/2] Move importdisk from qm to API

2020-05-22 Thread Dominic Jäger
I'd appreciate a few hints for the importdisk GUI feature.

Yes or no to automatically adding the drive as active (not unused)?

Signed-off-by: Dominic Jäger 
---
 PVE/API2/Qemu.pm | 87 +++-
 PVE/CLI/qm.pm| 57 +--
 PVE/QemuServer/ImportDisk.pm |  2 +-
 3 files changed, 87 insertions(+), 59 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index fd51bf3..5e75605 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -23,6 +23,7 @@ use PVE::QemuServer;
 use PVE::QemuServer::Drive;
 use PVE::QemuServer::CPUConfig;
 use PVE::QemuServer::Monitor qw(mon_cmd);
+use PVE::QemuServer::ImportDisk qw(do_import);
 use PVE::QemuMigrate;
 use PVE::RPCEnvironment;
 use PVE::AccessControl;
@@ -44,8 +45,6 @@ BEGIN {
 }
 }
 
-use Data::Dumper; # fixme: remove
-
 use base qw(PVE::RESTHandler);
 
 my $opt_force_description = "Force physical removal. Without this, we simple 
remove the disk from the config file and create an additional configuration 
entry called 'unused[n]', which contains the volume ID. Unlink of unused[n] 
always cause physical removal.";
@@ -4203,4 +4202,88 @@ __PACKAGE__->register_method({
return PVE::QemuServer::Cloudinit::dump_cloudinit_config($conf, 
$param->{vmid}, $param->{type});
 }});
 
+__PACKAGE__->register_method ({
+name => 'importdisk',
+path => '{vmid}/importdisk',
+method => 'POST',
+protected => 1,
+proxyto => 'node',
+description => "Import an external disk image into a VM.
+   The image format has to be supported by qemu-img(1).",
+permissions => {
+   description => "You need 'VM.Config.Disk' permissions on /vms/{vmid},
+   and 'Datastore.AllocateSpace' permissions on the storage.",
+   check => [ 'and',
+  ['perm', '/vms/{vmid}', [ 'VM.Config.Disk' ]],
+  ['perm', '/storage/{storage}', [ 'Datastore.AllocateSpace' 
]],
+   ],
+},
+parameters => {
+   additionalProperties => 0,
+   properties => PVE::QemuServer::json_config_properties ({
+   node => get_standard_option('pve-node'),
+   vmid => get_standard_option('pve-vmid', {completion => 
\::QemuServer::complete_vmid}),
+   source => {
+   description => 'Path to the disk image to import',
+   type => 'string',
+   optional => 0,
+   },
+   format => {
+   type => 'string',
+   description => 'Target format',
+   enum => [ 'raw', 'qcow2', 'vmdk' ],
+   optional => 1,
+   },
+   }),
+},
+returns => { type => 'string'},
+code => sub {
+   my ($param) = @_;
+   print("start\n");
+
+   my $rpcenv = PVE::RPCEnvironment::get();
+   my $authuser = $rpcenv->get_user();
+
+   my $node = extract_param($param, 'node');
+   my $vmid = extract_param($param, 'vmid');
+   my $source = extract_param($param, 'source');
+   my $drive = extract_param($param, 'drive');
+   my $format = extract_param($param, 'format');
+   my $storecfg = PVE::Storage::config();
+
+   # TODO nice error message if drive is not reachable
+   my $check_replication = sub { }; # TODO implement me, maybe?
+   my $driveX;
+   foreach my $opt (keys %$param) {
+   die ("Die because multiple drives\n") if defined($driveX);
+   if (PVE::QemuServer::is_valid_drivename($opt)) {
+   # cleanup drive path
+   my $drive = PVE::QemuServer::parse_drive($opt, $param->{$opt});
+   raise_param_exc({ $opt => "unable to parse drive options" }) if 
!$drive;
+   PVE::QemuServer::cleanup_drive_path($opt, $storecfg, $drive);
+   $check_replication->($drive); # TODO do I need this?
+   $param->{$opt} = PVE::QemuServer::print_drive($drive);
+   die "$source: non-existent or non-regular file\n" if (! -f 
$source);
+   $driveX = $drive;
+   }
+   }
+   $drive = $driveX;
+
+   my $message = $drive ? "to drive $drive->{'file'} on" : 'as unused 
drive to';
+   print "Importing disk '$source' " . $message . " VM $vmid ...\n";
+   my $worker = sub {
+   eval {
+   my $dn = "$drive->{'interface'}$drive->{'index'}";
+   print("before import dn is $dn\n");
+   my ($storeid) = $drive->{'file'} =~ /^(.*):/;
+   print("storeid before import is $storeid\n");
+   my ($drive_id, $volid) = PVE::QemuServer::ImportDisk::do_import(
+   $source, $vmid, $storeid, { format => $format, drive_name 
=> $dn });
+   print "Successfully imported disk '$source' as '$drive_id: 
$volid'\n";
+   };
+   die "Importing disk failed: $@\n" if $@;
+   };
+   return $rpcenv->fork_worker('importdisk', $vmid, $authuser, $worker);
+}});
+
 1;
diff --git a/PVE/CLI/qm.pm 

[pve-devel] ceph octopus rbd benchmark

2020-05-22 Thread Alexandre DERUMIER
Hi,

I have done some benchmark with librbd octopus,

results are really great with new the write-around cache policy. (Simply need 
to enable cache=writeback in qemu)


Here some iops result with 1vm - 1disk -  4k block   iodepth=64, librbd, no 
iothread.



nautilus-cache=none nautilus-cache=writeback
  octopus-cache=none octopus-cache=writeback
  
randread 4k  62.1k 25.2k
61.1k 60.8k
randwrite 4k 27.7k 19.5k
34.5k 53.0k
seqwrite 4k  7850  37.5k
24.9k 82.6k



We don't have anymore read degradation with cache=writeback,  and write 
performance is around 2,5x faster !
I think that when octopus will be ready for proxmox6, we could advise user to 
change the disk cache to writeback.
(and maybe select it as default in gui when an rbd storage is used for a new vm 
isk)


___
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel