воскресенье, 11 августа 2013 г.

Концепция VIX API

Введение от себя

В прошлом посте было сделано небольшое введение по библиотеке VIX API, позволяющую писать автоскрипты для выполнения процессов на виртуальных машинах VMWare. В этой статье рассмотрим базовые концепции VIX API. Данная статья яляется переводом части официальной документации, оригинальная статья на английском доступна по ссылке www.vmware.com/support/developer/vix-api/vix112_reference

Объекты и Хендлеры

Подсчет ссылок на хендлеры

Хендлеры содержат ссылки, поэтому пред их использованием необходимо вызвать функцию «release».  Передовать в функцию Vix_ReleaseHandle() нужно валидный хендлер. Функция Vix_ReleaseHandle() освобождает любые типы хендлеров:
void Vix_ReleaseHandle(VixHandle handle);
Пример, показывающий как открывать и освобождать хендлер:
VixHandle handle1;
handle1 = MyOpenVMWrapper(...various parameters...);
// handle1 is assigned a unique integer value.

// Now you can perform various operations on handle1.

Vix_ReleaseHandle(handle1);
handle1 = VIX_INVALID_HANDLE;
// handle1 has been released and should no longer be used.

Независимость хендлеров

Как правило, в программе, используется несколько активных хендлеров, каждый из которых может, представляет разные объекты. Хендлеры могут создаваться и уничтожаться независимо. Пример:
VixHandle handle1;
VixHandle handle2;

handle1 = MyOpenVMWrapper(... parameters for virtual machine 1...);
// handle1 is assigned a unique value - for example, 11.

handle2 = MyOpenVMWrapper(... parameters for virtual machine 2...);
// handle2 is assigned a unique value - for example, 12.

// Now you can perform various operations on handle1 or handle2.

Vix_ReleaseHandle(handle1);
handle1 = VIX_INVALID_HANDLE;
// handle1 has been released and should no longer be used.

// You can still perform operations on handle 2.

Vix_ReleaseHandle(handle2);
handle2 = VIX_INVALID_HANDLE;
// handle2 has been released and should no longer be used.

Удаление хендлеров

Если данные, хранящиеся в хендлере больше не нужны, можно спокойно освобождать хендлер. Например, при удалении виртуальной машины, вызывается метод удаления с хендлером виртуальной машины, а следом вызывается функция освобождения самого хендлера. Такая конструкция позволяет избежать путаницы, когда функция отрабатывает и не освобождает хендлер.
Клиентское приложение ответственно за вызов функции освобождения каждого хендлера. В случае освобождения хендлера после удаления виртуальной машины, удаляющая функция обновляет внутренний статус хендлера, так что большинству функций, за исключением функции освобождения, будет понятно, что виртуальная машина удалена, и они вернут ошибку.

Открытие хендлеров

Если дважды открыть хендлер для некоторой виртуальной машины, без освобождения первого хендлера, открывающая функция вернет тот же хендлер оба раза. При этом  счетчик ссылок хендлера увеличивается два раза, поэтому нужно вызвать функцию освобождения дважды.
VixHandle handle1;
VixHandle handle2;

handle1 = MyOpenVMWrapper(...various parameters...);
// handle1 is assigned a unique value.
// handle1 has reference count 1.

// Now you can perform various operations on handle1.

handle2 = MyOpenVMWrapper(...the SAME parameters identifying the SAME virtual machine...);
// handle2 has the same value as handle1.
// handle1 has reference count 2.
ASSERT(handle1 == handle2);

Vix_ReleaseHandle(handle1);
// handle1 has reference count 1.

// The handle still can be safely used here.

Vix_ReleaseHandle(handle1);
handle1 = handle2 = VIX_INVALID_HANDLE;
// The handle has been released and should no longer be used.

Каждая функция возвращающая хендлер, увеличивает счетчик ссылок хендлера. Поэтому клиентское приложение должно освобождать хендлер каждый раз, как он бал возвращен функцией Vix.

Внутренние ссылки хендлера

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

Итого
В конце перевода хотел бы добавить несколько строк от себя. Хендлеры - это один из базовых элементов в Vix, практически все функции VIX API завязаны на использованием хенлеров. По сути хендлеры - челочисленные индетификаторы, позволяющие получать доступ к выполняющимся асинхронным операциям или же ссылаться на свойства, используемые в методах.


четверг, 1 августа 2013 г.

Небольшое введение VIX API

VMWare VIX - библиотека предназначена для работы с виртуальными машинами. С помощью библиотеки VIX можно писать автоматизированные скрипты для автоматизации операции на гостевой машине. Библиотека будет полезна как и для программиста и автотестера (например, для запуска удаленных процессов), так и для сисадмина (например, для автоматического создания бекапов виртуальных машин).
Например, запуск удаленных процессов на тестовых виртуальных машинах. На данный момент поддерживаются следующие языки С, Perl, C#. Плюс существует несколько Си оберток на Python.
Vix поддерживает следующие операционные системы:

  • Линуксовые дистрибутивы
  • Microsoft Windows
  • Solaris 10 и OpenSolaris 2009.6
На данный момент  последняя доступна версия 1.12, скачать можно с оф. сайта www.vmware.com/support/developer/vix-api/. Плюс там же можно найти небольшую документацию по API с примерами на Си.

В следующем  посте рассмотрим базовые концепции, понятия библиотеки VIX.

пятница, 19 июля 2013 г.

PSExec. Запуск удаленных процессов

Каждый автоматизатор рано или поздно сталкивался с задачей запуска процессов на удаленной машине. Сегодня рассмотрим, одну из программ, позволяющую это сделать.
PsExec – небольшой тул, который позволяет выполнять программы на удаленным машинах. Он входит в набор утилит пакета PSTools, разработанный замечательной компании Sysinternals, знакомую также по небезызвестной программе для мониторинга процессов Windows – Process Explorer.
Скачать последнюю версию PSTools и подробную информацию о нем можно на сайте http://technet.microsoft.com.


Пример

Для иллюстрации работы рассмотрим запуск процесса на удаленной машине. В моем случае это будет виртуальная машина VMWare vSphere.

Начнем с малого – запустим notepad на удаленной машине

> PsExec.exe \\192.168.0.1 -u Administrator -p 12345 notepad

Здесь ничего сложного нет, передаем PsExec параметры соединения – ip, логин и пароль.

Ну и в конце указываем программу, которую необходимо запустить (также можно указать абсолютный путь до notepad).
Местами возникают ситуации, когда необходимо запустить удаленный процесс в интерактивном режиме. Несколько модифицируем пример выше.

> PsExec.exe \\192.168.0.1 -u Administrator -p 12345 –i 0 notepad

Ключик –i, говорит PsExec, что необходимо получить доступ к рабочему столу, параметр «0» - номер сессии пользователя на удаленной машине. Данная команда помогает, когда необходимо снять скриншот окна запущенного процесса.

Еще один полезный ключик, который я использую –d, он позволяет не ждать окончания выполнения программы (когда важен просто запуск программы).


Вывод

PsExec – замечательная тулза позволяющая без особого геморроя запускать процессы на удаленных машинах.

Более подробную информацию можно найти в официальной документации на http://technet.microsoft.com, а так же советую почитать замечательную стать в блогах http://blogs.technet.com/b/ru_forum_support/archive/2010/12/17/psexec.aspx

вторник, 16 июля 2013 г.

Ресурс по коллекциям и алгоритмам

Недавно в одном из постов на хабре наткнулся на замечательную ссылку http://bigocheatsheet.com. Ресурс посвящен разным коллекциям, используемым в программировании, а также различным алгоритмам для работы с ними (сортировка, поиск). Плюс даны оценки сложности для разных операций. Вообщем крайне рекомендую к ознакомлению.

пятница, 12 июля 2013 г.

Здравствуй, читатель.

Открываю свой новый блог о тестировании и авто тестировании программного обеспечения. Это собственно те области, которые мне интересны и которыми я занимаюсь. На страницах блога буду рассказывать о проблемах и решениях, с которыми я сталкиваюсь в повседневной практике. Постараюсь по мере поступления материала, оперативно его публиковать.

Евгений