Вы используете "основное" API для получения этой информации... Это довольно ненадежно и, например, не работает, если есть состояние HA, тогда это будет $14 столбец. Если у вас действительно нет возможности или желания устанавливать такой базовый инструмент, как jq, вы всегда можете использовать существующие интерпретаторы, такие как python (выводя все узлы, если есть несколько гостей с одинаковыми именами): Код: pvesh get /cluster/resources -type vm --noborder --output-format json-pretty | python3 -c "import json,sys;j=json.load(sys.stdin);print(next((d['node'] for d in j if d['name']=='YOUR_VM_NAME'), 'Гость не найден'))" Или Perl, просто выводя первого, кого найдет: Код: pvesh get /cluster/resources -type vm --noborder --output-format json | perl -MJSON -ne 'my $j=decode_json($_); for my $res ($j->@*) { if ($res->{type} =~ /qemu|lxc/ && $res->{name} eq "YOUR_VM_NAME") { print $res->{node}."\n"; last; }}' Или Perl, но получая все узлы для гостей с одинаковым именем: Код: pvesh get /cluster/resources -type vm --noborder --output-format json | perl -MJSON -ne 'my $j=decode_json($_); print "$_->{node}\n" for grep { $_->{type} =~ /qemu|lxc/ && $_->{name} eq "YOUR_VM_NAME" } $j->@*;' И Python, и Perl являются широко доступными и по умолчанию установлены в Proxmox VE, так как оба имеют встроенные модули JSON, поэтому использовать такой структурированный формат намного лучше, чем парсинг с помощью AWK. Также можно создать небольшой скрипт shell, который облегчит использование: Bash: #!/bin/sh
name="$1"
if [ -z "$name" ]; then
printf "использование: $0 <имя-гостя>\n"
exit 1
fi
pvesh get /cluster/resources -type vm --noborder --output-format json \
| NAME="$name" perl -MJSON -ne 'my $j=decode_json($_); print "$_->{node}\n" for grep { $_->{type} =~ /qemu|lxc/ && $_->{name} eq $ENV{"NAME"}} $j->@*;' Например, сохраните это как /usr/local/bin/find-guest-node на узлах Proxmox VE, сделайте его исполняемым (chmod +x /usr/local/bin/find-guest-node), и затем вы можете использовать find-guest-node "имя vm", чтобы получить узел(и). Единственное, что немного странно, это то, что входной тип "vm" должен называться "гость", так как он включает все наши виртуальные типы гостей. Но у возвратного типа, использующего значение конкретного типа, также есть свои причины, мы имели другие реализации для некоторых типов, такие как CT был openvz давно. И хотя мы всегда поддерживаем как ВМ, так и CT, подлежащая технология может измениться, поэтому "разные" типы позволяют фронтендам решать, как действовать с гостем, так как в зависимости от фактического типа доступны разные функции и так далее. Поэтому ввод требует гостей, что имеет смысл, так как VMID является единым пространством имен для всех гостей, а вывод дает вам конкретный тип; мы не видим здесь проблемы (кроме уже упомянутого, что ввод "vm" должен быть "гость", но просто ломать API для этого кажется слишком сложным для многих проектов, которые зависят от нас...)