как получить все ВМ и связанное с ними хранилище с помощью govc

Вопрос или проблема

Я могу подключиться к 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

Пояснения к коду:

  1. govc find /folder-name -type m – находим все виртуальные машины в указанной папке.
  2. В цикле for перечисляем все найденные ВМ и для каждой ВМ выполняем команду govc vm.info -r "${vm}", чтобы получить информацию о ней.
  3. Используем grep для фильтрации строки, содержащей "Datastore", а затем awk и sed для извлечения имени кластера хранилищ.
  4. В конце выводится имя виртуальной машины и соответствующее хранилище в формате, который вы указали: vm1, storagecluster1.

Пример вывода:

После выполнения данной команды, вы получите результат в формате:

vm1, "storagecluster1"
vm2, "storagecluster4"
vm3, "storagecluster1"
vm4, "storagecluster2"

Заключение

Следуя этим шагам, вы сможете легко получить и отобразить все виртуальные машины вместе с их ассоциированными кластерами хранилищ в нужном формате. Убедитесь, что у вас есть необходимые права доступа для выполнения всех команд и получения информации из vCenter.

Если у вас остались вопросы или необходима дополнительная помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...