Как найти информацию о хранилище данных NAS в vijava

Я пишу приложение, которое взаимодействует с клиентом VMWare vSphere. Для этого используется библиотека Vijava. Мне нужно найти хранилище данных NAS на хосте, используя IP-адрес сервера NFS и имя каталога экспорта.

Я могу найти хранилища данных на этом хосте и найти те, которые относятся к типу NFS, используя HostFileSystemVolume.type, но как мне теперь найти объект NASDatastoreInfo для этого хранилища данных. Документация обширна, и у меня не было времени прочитать ее всю. Я знаю, что мне нужно получить объект NASDatastoreInfo для соответствующего объекта хранилища данных, который я нашел, но я не могу определить какой-либо метод, который может возвращать объект NASDatastoreInfo. Все, что у вас есть, — это объект DatastoreInfo, полученный из объекта Datastore.

Любая помощь будет оценена по достоинству.

Спасибо... свободно


person footloose    schedule 19.11.2012    source источник


Ответы (2)


Вы не сможете получить какую-либо информацию о томе NAS, если он не будет смонтирован.

Я сомневаюсь, что у вас на хосте так много смонтированных дисков.

ПРЕДПОЛОЖЕНИЕ:

  1. Просто захватите все смонтированные тома

  2. Проверьте наличие свойства NASDataStoreInfo на каждом из них.

  3. Просто игнорируйте тома, на которых его нет.

person paulsm4    schedule 19.11.2012

Вот как мне удалось это сделать. Код может показаться немного сложным, но вот суть:

Просмотрите все тома этого хоста и найдите те, на которых построена файловая система NFS. Для каждого из этих томов повторите список хранилищ данных с условием имя тома = имя хранилища данных. Найдя совпадение, получите объект NASDatastoreInfo из объекта DatastoreInfo и проверьте IP-адрес удаленного сервера NFS и каталог экспорта.

Я проверил HostFileSystemVolume.type=='NFS' для всех томов на этом хосте, а затем проверил IP-адрес удаленного сервера NFS и каталог экспорта для этого тома.

В коде уже есть экземпляр службы «si» для vCenter и объект HostSystem с именем «host».

     HostDatastoreSystem hds = host.getHostDatastoreSystem();
     HostDatastoreBrowser hdb = host.getDatastoreBrowser();
     Datastore[] allDS = hdb.getDatastores();
     HostConfigInfo hostConfigInfo = host.getConfig();
     HostFileSystemVolumeInfo hostFSVolumeInfo = hostConfigInfo.getFileSystemVolume();
     HostFileSystemMountInfo[] hostFSMountInfo= hostFSVolumeInfo.getMountInfo();
     for (HostFileSystemMountInfo hfsmi : hostFSMountInfo) {
         HostFileSystemVolume hfsv = hfsmi.getVolume();
         if (hfsv.getType().equalsIgnoreCase("nfs")){
             String dsName = hfsv.getName();
             for(Datastore ds: allDS) {
                 DatastoreInfo di = ds.getInfo();
                 if (di.getName().equals(dsName)){
                     HostNasVolume nas = ((NasDatastoreInfo)di).getNas();
                     if (nas.getRemoteHost().equals(nfsServer) & nas.getRemotePath().equals(datastorePathOnNfsServer)) {
                         try {
                        } catch (HostConfigFault e) {
                             logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " +  "host: " + hostname , e);
                             ret = 1;
                             return ret;
                        } catch (ResourceInUse e) {
                             logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " +  "host: " + hostname , e);
                             ret = 1;
                             return ret;
                        } catch (NotFound e) {
                             logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " +  "host: " + hostname , e);
                             ret = 1;
                             return ret;
                        } catch (RuntimeFault e) {
                             logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " +  "host: " + hostname , e);
                             ret = 1;
                             return ret;
                        } catch (RemoteException e) {
                             logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " +  "host: " + hostname , e);
                             ret = 1;
                             return ret;
                        }
                         return 0;
                     }
                 }
             }
         }
     }
     logger.error("ERROR : unmountNfsDatastore : Could not find Datastore exported by " + nfsServer + " on " +  "host: " + hostname);
     ret = 0;
     return ret;
                            hds.removeDatastore(ds);
person footloose    schedule 19.11.2012