Поиск VM с одинаковыми MAC-адресами

Чтобы сравнить MAC-адреса и найти среди них одинаковые потребуются дополнительные инструменты.

MAС-адреса отображаются в XML-представлениях каждой из VM и вложены в XML-объекты NetworkConnectionSectionNetworkConnectionMACAddress. Чтобы получить список MAC-адресов, необходимо запросить список VM, а затем поочередно отправлять GET-запросы на URL каждой из VM и извлекать соответствующий MAC-адрес.

Есть разные способы решения задач такого типа, например, разработка скрипта на Python. В этом документе предложен другой вариант решения задачи, для реализации которого вам понадобится только Postman и Excel (или другой подходящий инструмент).

Postman: авторизация

Авторизуйтесь, если вы еще не сделали этого. При создании следующих запросов на вкладках Headers и Authorization должны быть актуальные версия API и токен.

Важно

После повторной авторизации актуализируйте версию API и токен в сохраненных запросах.

Postman: создание запроса списка VM

  1. Создайте GET-запрос для вывода списка VM:

    GET https://vcd.sbercloud.ru/api/query?type=vm&fields=name&filter=isVAppTemplate==false
    
    • type=vm — список VM.

    • fields=name — для каждой VM отображаются только атрибут name.

    • filter=isVAppTemplate==false — отображаются только развернутые VM, а шаблоны VM отфильтровываются.

  2. На вкладке Test добавьте скрипт:

    var jsonObject = xml2Json(responseBody);
    var length = jsonObject.QueryResultRecords.VMRecord.length;
    pm.environment.set("length",length);
    
    for (var counter = 0;  counter  < length; counter++) {
        pm.environment.set("vm-id-"+[counter],jsonObject.QueryResultRecords.VMRecord[counter].$.href)
    }
    
    console.log("VM Num", length);
    

    Это скрипт:

    • Считывает ответ сервера.

    • Cохраняет URL всех VM в переменные в разделе Environments.

    • Выводит на консоль количество VM.

    Принцип получения пути до объекта

    1. На вкладке Test запросите вывод всего Body ответа:

      var jsonObject = xml2Json(responseBody);
      console.log(jsonObject);
      
    2. Отправьте запрос.

    3. Нажмите Console на нижней панели.

    4. Поочередно раскрывайте объекты, пока не найдете то, что вам нужно.

      Например, чтобы найти ссылку на определенную VM, нужно раскрыть QueryResultRecords, первый элемент массива VMRecord и $. Искомая ссылка указана в атрибуте href.

    5. Допишите к jsonObject через точки все пройденные объекты. В примере выше путь будет выглядеть так: jsonObject.QueryResultRecords.VMRecord[1].$.href.

  3. Нажмите Save → Save As ...

  4. В поле Request name укажите название запроса, например «Request-VM-List».

  5. В поле Select a collection or folder to save to: нажмите + Create Collection и укажите название коллекции, например «First Request».

  6. Нажмите Save/Save to … .

Сохраненный запрос появится в разделе Collections в указанной коллекции.

Важно

Если вы сохранили запрос, а потом авторизовались заново, актуализируйте версию API и токен на вкладках Headers и Authorization.

Postman: создание запроса MAC-адресов VM

  1. Создайте GET-запрос c переменной {{vm-id}} вместо URL.

    GET {{vm-id}}
    
  2. На вкладке Pre-request Script добавьте скрипт:

    var input_data = pm.iterationData.get("value");
    pm.environment.set("vm-id",pm.environment.get("vm-id-"+input_data))
    

    Этот скрипт считывает значение из входного CSV-файла перед отправкой запроса. На основе данных из CSV-файла скрипт меняет {{vm-id}} на URL VM.

    URL всех VM хранятся в переменных в разделе Environments после выполнения первого запроса. Скрипт берет URL из этих переменных.

  3. На вкладке Test добавьте скрипт:

    var jsonObject = xml2Json(responseBody);
    var length = jsonObject.Vm.NetworkConnectionSection.NetworkConnection.length;
    
    if (length == undefined) {
        console.log(jsonObject.Vm.NetworkConnectionSection.NetworkConnection.MACAddress, "," ,jsonObject.Vm.$.name);
    }
    else {
       for (var counter = 0;  counter < length; counter++) {
          console.log(jsonObject.Vm.NetworkConnectionSection.NetworkConnection[counter].MACAddress, "," ,jsonObject.Vm.$.name);
       }
    }
    

    Этот скрипт:

    • Считывает ответ сервера.

    • Выводит на консоль MAC-адрес и название VM. Если VM подключена к нескольким сетям, у нее может быть несколько MAC-адресов. На консоль выводятся все MAC-адреса VM.

  4. Нажмите Save → Save As ...

  5. В поле Request name укажите название запроса, например «Request-MAC».

  6. В поле Select a collection or folder to save to: нажмите + Create Collection и укажите название коллекции, например «Second Request».

  7. Нажмите Save/Save to … .

Сохраненный запрос появится в разделе Collections в указанной коллекции.

Важно

Если вы сохранили запрос, а потом авторизовались заново, актуализируйте версию API и токен на вкладках Headers и Authorization.

Postman: запрос списка VM

  1. Откройте запрос списка VM в созданной ранее коллекции.

  2. Нажмите Send.

  3. Нажмите Console на нижней панели.

  4. Уточните количество VM, которое появится в консоли после выполнения запроса.

../../_images/s__first-req.png

Это значение необходимо для формирования CSV-файла.

Кроме вывода количества VM, скрипт сохраняет URL всех VM из списка в переменные. Чтобы посмотреть переменные, перейдите в раздел Environments и откройте ваше окружение.

../../_images/s__environment.png

Excel: создание CSV-файла со входными данными

  1. Откройте Блокнот, Excel или другой редактор, в котором можно создать CSV-файл.

  2. В первой ячейке/строке укажите «value».

  3. Под «value» укажите в столбец числа от 0 до (количество VM - 1). Например, если количество VM = 3, файл должен выглядеть так:

    ../../_images/s__csv-excel.png ../../_images/s__csv-note.png
  4. Сохраните файл в формате CSV.

Вы подготовили входные данные для серии запросов MAC-адресов VM.

Postman: запуск серии запросов MAC-адресов

  1. Нажмите на название коллекции с запросом MAC.

  2. Нажмите Run в окне коллекции сверху.

    ../../_images/s__run-sec-req.png
  3. Если ваши запросы хранятся в одной коллекции, уберите флаг из чекбокса запроса списка VM. Запускаться должен только запрос MAC-адресов.

  4. Нажмите Select File и выберите созданный ранее CSV-файл.

    В поле Iterations появится количество запусков запроса, что соответствует количеству VM. Данные из CSV-файла определяют, для какой VM отправляется очередной GET-запрос из серии.

  5. Нажмите Run… .

    ../../_images/s__select-csv.png
  6. Нажмите Console на нижней панели.

  7. Ознакомьтесь со списком MAC-адресов. Для удобства просмотра нажмите на три точки сверху от консоли и выберите Hide Network.

    ../../_images/s__mac-list.png

Если MAC-адресов много и невозможно быстро определить, какие их них одинаковые, перейдите к следующему шагу.

Excel: поиск одинаковых MAC-адресов

Рассмотрим вариант поиска через Excel. Вы можете воспользоваться любым инструментом, который подходит для решения этой задачи.

  1. Скопируйте список MAC-адресов из консоли Postman в Excel.

  2. Отделите MAC-адрес от названия VM.

    • Выделите список.

    • В меню сверху нажмите Данные → Текст по столбцам.

    • Выберите «с разделителем» и нажмите Далее.

    • Выберите «запятая» и нажмите Далее. В предложенных скриптах настроен вывод на консоль в формате <MAC>,<,>,<VM name> с разделителем «запятая». Если в вашем варианте скрипта другой разделитель, укажите его.

    • Нажмите Готово.

    Названия VM отделятся от MAC-адресов и появятся в столбце справа.

  3. Преобразуйте данные в таблицу. Выделите полученные столбцы и в меню сверху нажмите Вставка → Таблица.

    Это необходимо, чтобы при дальнейшей сортировке сохранялась привязка MAC к названию VM.

  4. Отсортируйте столбец с MAC-адресами. Выделите МАС-адреса и в меню сверху нажмите Главная → Сортировка и фильтр → Сортировка от A до Я.

  5. Настройте автоматическое определение одинаковых MAC-адресов. Выделите МАС-адреса и в меню сверху нажмите Главная → Условное форматирование → Правила выделения ячеек → Повторяющиеся значения. Нажмите ОК.

Одинаковые значения MAC-адресов располагаются рядом и выделены цветом.