Вопрос или проблема
Я могу подключиться к Vcenter, используя govc, однако мне хотелось бы получить список всех виртуальных машин в конкретной папке вместе с их хранилищами (связанными объектами) или кластерами хранилищ в формате, разделенном запятыми.
Может кто-то помочь мне с командой govc, чтобы получить желаемый вывод, как ниже:
vm1, storagecluster1
vm2, storagecluster4
vm3, storagecluster1
vm4, storagecluster2
# Подключитесь к vCenter, используя govc
govc about || { echo "Не удалось подключиться к vCenter."; exit 1; }
Имя: VMware vCenter Server
Производитель: VMware, Inc.
Версия: 7.0.3
Сборка: 22357613
Тип ОС: linux-x64
Тип API: VirtualCenter
Версия API: 7.0.3.0
Это поможет?
govc vm.info $(govc find / -type m)
Обратите внимание, что /
может обозначать любую папку/подпапку.
Ответ или решение
Чтобы извлечь список всех виртуальных машин (ВМ) и связанного с ними хранилища (кластера хранилищ) из конкретной папки с использованием инструмента командной строки govc, вам нужно будет выполнить несколько шагов. Ниже представлено подробное руководство по данной задаче.
Шаг 1: Подключение к vCenter
Сначала убедитесь, что вы успешно подключились к вашему серверу vCenter с помощью команды:
govc about || { echo "Не удалось подключиться к vCenter."; exit 1; }
Если подключение выполнено успешно, вы увидите информацию о вашей версии vCenter, как показано в вашем вопросе.
Шаг 2: Найти папку с виртуальными машинами
Для того чтобы получить виртуальные машины в определенной папке, воспользуйтесь командой govc find
. Например, если вы хотите получить все ВМ в папке /folder-name
, выполните следующее:
govc find /folder-name -type m
Эта команда будет искать все объекты типа ‘vm’ в указанной папке.
Шаг 3: Получение информации о виртуальных машинах и связанных хранилищах
Теперь, чтобы получить информацию о показателях каждой виртуальной машины, включая связанный кластер хранилищ, используйте следующую конструкцию:
for vm in $(govc find /folder-name -type m); do
datastore=$(govc vm.info -r "${vm}" | grep "Datastore" | awk '{print $2}' | sed -e 's/^/"/' -e 's/$/"/') # извлечение имени кластера хранилищ
echo "${vm}, ${datastore}"
done
Пояснения к коду:
govc find /folder-name -type m
– находим все виртуальные машины в указанной папке.- В цикле
for
перечисляем все найденные ВМ и для каждой ВМ выполняем командуgovc vm.info -r "${vm}"
, чтобы получить информацию о ней. - Используем
grep
для фильтрации строки, содержащей "Datastore", а затемawk
иsed
для извлечения имени кластера хранилищ. - В конце выводится имя виртуальной машины и соответствующее хранилище в формате, который вы указали:
vm1, storagecluster1
.
Пример вывода:
После выполнения данной команды, вы получите результат в формате:
vm1, "storagecluster1"
vm2, "storagecluster4"
vm3, "storagecluster1"
vm4, "storagecluster2"
Заключение
Следуя этим шагам, вы сможете легко получить и отобразить все виртуальные машины вместе с их ассоциированными кластерами хранилищ в нужном формате. Убедитесь, что у вас есть необходимые права доступа для выполнения всех команд и получения информации из vCenter.
Если у вас остались вопросы или необходима дополнительная помощь, не стесняйтесь обращаться.