[pve-devel] Suggest hostnames in bash completion
Wolfgang Bumiller
w.bumiller at proxmox.com
Mon Jul 18 14:12:25 CEST 2016
On Mon, Jul 18, 2016 at 01:46:40PM +0200, Tobia Conforto wrote:
> Hello
>
> I would like to add a feature (and contribute the code, if anybody is interested): make the 'pct' bash completion show the hostnames when a vmid parameter is being completed.
This should probably be optional (perhaps an env var) since it's also a
bit more expensive and completion already feels a bit sluggish.
>
> Current behaviour:
>
> # pct enter <Tab><Tab>
> 200 201 202 ...
>
> What I'd like to get:
>
> # pct enter <Tab><Tab>
> 200(frontend-1) 201(frontend-2) 202(db-server) ...
>
> The way this is usually done is to return a list of items containing the description in a custom format (such as "$item($comment)" in this example) unless the list is down to only one possible completion: in that case the description is stripped, so that only the item is inserted into the commandline.
>
> I found the code that prints the completion list in CLIHandler.pm around line 260 ($print_parameter_completion), but it gets the list of possible values from an anonymous sub ($info->{parameters}->{properties}->{$pname}->{completion}) which I don't have a clue where it may be defined and in how many other places it may be used.
Completion functions are provided in the parameter definitions of
commands in the CLI/ subfolders.
Eg. pct enter has this piece of description code (in CLI/pct.pm):
| parameters => {
| additionalProperties => 0,
| properties => {
| vmid => get_standard_option('pve-vmid', { completion => \&PVE::LXC::complete_ctid_running }),
| },
| },
This shows that it's using PVE/LXC.pm's complete_ctid_running() sub,
which in turn you'll find is using $complete_ctid_full.
> Given this, I'd rather add a custom behaviour for the 'vmid' parameter in $print_parameter_completion, rather than changing something more generic.
>
> Can anybody give me a hint on how to obtain the list of vmid along with the hostnames inside that module?
See PVE/LXC.pm's vmstatus() sub.
Anologously for 'qm' you'll have to modify the corresponding function
from the qemu-server package.
More information about the pve-devel
mailing list