From 335af808a431fbab21381c523c6df5850d4b19c1 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Mon, 7 Sep 2015 08:13:07 +0200 Subject: [PATCH] improve bash completion --- PVE/API2/Qemu.pm | 37 ++++++++++++++++++++++--------------- PVE/CLI/qm.pm | 19 +++++++++++-------- PVE/QemuServer.pm | 14 ++++++++++++++ 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index c682c27..83b3c19 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -282,6 +282,7 @@ __PACKAGE__->register_method({ storage => get_standard_option('pve-storage-id', { description => "Default storage.", optional => 1, + completion => \&PVE::QemuServer::complete_storage, }), force => { optional => 1, @@ -620,7 +621,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), current => { description => "Get current values (instead of pending values).", optional => 1, @@ -676,7 +677,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), }, }, returns => { @@ -1069,7 +1070,7 @@ __PACKAGE__->register_method({ properties => PVE::QemuServer::json_config_properties( { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), skiplock => get_standard_option('skiplock'), delete => { type => 'string', format => 'pve-configid-list', @@ -1118,7 +1119,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid_stopped }), skiplock => get_standard_option('skiplock'), }, }, @@ -1178,7 +1179,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), idlist => { type => 'string', format => 'pve-configid-list', description => "A list of disk IDs you want to delete.", @@ -2041,7 +2042,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), newid => get_standard_option('pve-vmid', { description => 'VMID for the clone.' }), name => { optional => 1, @@ -2322,13 +2323,16 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), disk => { type => 'string', description => "The disk you want to move.", enum => [ PVE::QemuServer::disknames() ], }, - storage => get_standard_option('pve-storage-id', { description => "Target Storage." }), + storage => get_standard_option('pve-storage-id', { + description => "Target storage.", + completion => \&PVE::QemuServer::complete_storage, + }), 'format' => { type => 'string', description => "Target Format.", @@ -2470,8 +2474,11 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), - target => get_standard_option('pve-node', { description => "Target node." }), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), + target => get_standard_option('pve-node', { + description => "Target node.", + completion => \&PVE::Cluster::complete_migration_target, + }), online => { type => 'boolean', description => "Use online/live migration.", @@ -2609,7 +2616,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), skiplock => get_standard_option('skiplock'), disk => { type => 'string', @@ -2788,7 +2795,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), snapname => get_standard_option('pve-snapshot-name'), vmstate => { optional => 1, @@ -2975,7 +2982,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), snapname => get_standard_option('pve-snapshot-name'), }, }, @@ -3018,7 +3025,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), snapname => get_standard_option('pve-snapshot-name'), force => { optional => 1, @@ -3067,7 +3074,7 @@ __PACKAGE__->register_method({ additionalProperties => 0, properties => { node => get_standard_option('pve-node'), - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid_stopped }), disk => { optional => 1, type => 'string', diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm index dc544a8..747e540 100755 --- a/PVE/CLI/qm.pm +++ b/PVE/CLI/qm.pm @@ -83,7 +83,7 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), }, }, returns => { type => 'null'}, @@ -104,7 +104,7 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), verbose => { description => "Verbose output format", type => 'boolean', @@ -144,7 +144,7 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid_running }), }, }, returns => { type => 'null'}, @@ -175,7 +175,7 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }), }, }, returns => { type => 'null'}, @@ -231,7 +231,7 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid_running }), timeout => { description => "Timeout in seconds. Default is to wait forever.", type => 'integer', @@ -271,7 +271,7 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid_running }), }, }, returns => { type => 'null'}, @@ -312,7 +312,10 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid', {optional => 1}), + vmid => get_standard_option('pve-vmid', { + optional => 1, + completion => \&PVE::QemuServer::complete_vmid, + }), }, }, returns => { type => 'null'}, @@ -332,7 +335,7 @@ __PACKAGE__->register_method ({ parameters => { additionalProperties => 0, properties => { - vmid => get_standard_option('pve-vmid'), + vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid_running }), iface => { description => "Select the serial device. By default we simply use the first suitable device.", type => 'string', diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index a503311..fedb58e 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -6443,4 +6443,18 @@ sub complete_vmid_running { return &$complete_vmid_full(1); } +sub complete_storage { + + my $cfg = PVE::Storage::config(); + my $ids = $cfg->{ids}; + + my $res = []; + foreach my $sid (keys %$ids) { + next if !PVE::Storage::storage_check_enabled($cfg, $sid, undef, 1); + push @$res, $sid; + } + + return $res; +} + 1; -- 2.39.2