Тестирование результатов интеграции
На этапе исполнения сервер IIS слушает порт 80. В программе есть несколько контроллеров, которые обрабатывают запросы, отправленные клиентским приложением. В процессе интеграции библиотеки в проект компании был создан VdsController, в котором были реализованы методы обработки запросов, подразумевающих взаимодействие с развёрнутой в описанном ранее кластере облачной инфраструктурой. После того, как пользователь прошёл процедуру регистрации в системе vds.ultrazoom.ru, он получает доступ к панели управления выделенными ему ресурсами. Создание пользователя непосредственно внутри системы облачной инфраструктуры происходит перед созданием первого виртуального сервера. Таблица 8. Аппаратная реализация узлов
Для тестирования работы и результатов интегрирования библиотеки, была создана тестовая учётная запись на портале vds.ultrazoom.ru. В разделеWeb-интерфейса сайта, отображающего средства создания новой виртуальной машины была выбрана тестовая конфигурация сервера под управлением операционной системы Windows Server 2008 и запущен процесс создания виртуальной машины. В результате соответствующий метод серверного приложения выполнил следующие действия: 1) Инстаниировал классы RegistrationQuery и AuthorizationQuery разработанной библиотеки OpenstackManager для выполнения операции создания пользователя облачной платформы. В качестве учётных данных были использованы логин и пароль, предоставленные на этапе регистрации на портале vds.ultrazoom.ru и хранящиеся в базе данных системы. 2) Выполнил задачу регистрации и авторизации пользователя в облаке средствами классов RegistrationQuery и AuthorizationQuery соответственно. 3) На основе выбранной конфигурации получил имена шаблона виртуальной конфигурации и образа виртуального сервера в соответствии с правилами именования данных элементов системы, установленными системными администраторами проекта и описанными в конфигурационном файле серверного приложения. 4) Инстанциировал класс CreateServerQuery, передав в конструктор токен, полученный на втором шаге и данные, полученные на третьем шаге. Инициализировал задачу по созданию виртуального сервера средствами класса CreateServerQuery. 5) Обработал данные, полученные в ответ на запрос выполнения функции OpenStackAPI, инициализирующей задачу создания нового виртуального сервера. Обновил необходимые данные о, доступных пользователю, экземплярах виртуальных серверов, которые хранятся в базе данных системы. 6) Отправил клиентскому приложению все необходимые данные для обновления Web-интерфейса пользователя. На рисунке 9 показан пользовательский интерфейс портала vds.ultrazoom.ru, предоставляющий информацию о созданном виртуальном сервере. Рисунок 10. Интерфейс пользователя vds.ultrzoom.ru
Вывод На этапе интеграции классы разработанной ранее библиотеки были успешно использованы в серверном приложении портала самообслуживания vds.ultrazoom.ru для решения задач по управлению ресурсами облка, развёрнутого средствами OpenStack на серверах компании UltraZoom.
Заключение В результате работы была получена библиотека классов .NET, содержащая функционал по управлению ресурсами облачной инфраструктуры. На этапе реализации данной библиотеки были выполнены следующие последовательные действия: · Спроектирована архитектура библиотеки классов · Реализованы базовые классы и интерфейсы архитектуры · Реализованы классы базовых команд · Реализованы классы сценариев В ходе проведенной работы были выполнены все поставленные в дипломе цели и задачи, т.е. полученная библиотека удовлетворяет следующим функциональным требованиям: · Содержит средства создания нового пользователя облачной платформы, поддерживающие установку ролей, определяющих конкретные правила и полномочия пользователя. · Содержит средства аутентификации, необходимые для взаимодействия пользователя с облачной платформой. · Содержит функционал, позволяющий пользователю создавать новые виртуальные сервера и управлять существующими. · Содержит функционал, необходимый для создания и управления резервными копиями виртуальных серверов пользователя.
Список используемой литературы 1. Технология облачных вычислений [Электронный ресурс] 2. Что такое инфраструктура как услуга [Электронный ресурс] 3. Маркелов, А. А. OpenStack. Знакомство с облачной операционной системой/ А. А. Маркелов –ДМК Пресс, 2016 г. – 160 с. 4. Внедрение OpenStack и куда двигаться дальше? [Электронный ресурс] https://habrahabr.ru/company/icl_services/blog/281068/ 5. Знакомство с OpenStack : архитектура, функции, взаимодействия [Электронный ресурс] http://www.ibm.com/developerworks/ru/library/cl-openstack-overview/index.html 6. OpenStack API Complete Reference [Электронныйресурс] 7. РихетД. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# /Д.Рихтер–Питер, 2012 г. – 928 с. 8. Общие сведения о платформе .NET Framework [Электронный ресурс] 9. ШилдтГ. C# 4.0. Полное руководство / Г. Шилдт –Вильямс, 2015 г. – 1056 с. 10. Гамма Э. Приёмы объектно-ориентированного проектирования. Паттерны проектирования / Э.Гамма, Р.Хелм, Р. Джонсон, Дж.Влиссидес –Питер, 2013 г. – 386 с. 11. Р. С. Мартин Принципы, паттерны и методики гибкой разработки на языке C# / Р. С. Мартин, М. Мартин. –Символ-Плюс, 2011 г. – 768 с. 12. Знакомство с OpenStack : Компонент Identity (Keystone) [Электронный ресурс] 13. Знакомство с OpenStack: компонент Glance и компонент Nova [Электронный ресурс]
ПРИЛОЖЕНИЕ А Листинг 1
public interface ICommand { void Execute(); } public interface IQuery<T> { T Execute(); } Листинг 3
public abstract class CommandBase : ICommand { public void Execute() { var webClient = new WebClient(); var httpParams = GetHttpRequestParams(); webClient.Headers.Add(HttpRequestHeader.ContentType, httpParams.ContentType); if (string.IsNullOrEmpty(httpParams.XAuthToken)) webClient.Headers.Set("X-Auth-Token", httpParams.XAuthToken); webClient.UploadString(httpParams.Url, httpParams.Method, httpParams.MessageBody); } abstract protected HttpRequestParams GetHttpRequestParams(); }
public abstract class QueryBase<T> : IQuery<T> { public void Execute() { var webClient = new WebClient(); var httpParams = GetHttpRequestParams(); webClient.Headers.Add(HttpRequestHeader.ContentType, httpParams.ContentType); if (string.IsNullOrEmpty(httpParams.XAuthToken)) webClient.Headers.Set("X-Auth-Token", httpParams.XAuthToken); var result = webClient.UploadString(httpParams.Url, httpParams.Method, httpParams.MessageBody); return JsonConvert.DeserializeObject<T>(result); } abstract protected HttpRequestParams GetHttpRequestParams(); } Листинг 4
public class CreateUserResponse { public string id {get; set;} public string name {get; set;} public string domain_id {get; set;} public string enabled {get; set;} }
public class CreateUserQuery : QueryBase<CreateUserCommand> { private string _url; private string _name; private string _password; private string _domainUuid;
public CreateUserQuery(string url, string name, string password, string domainUuid) { _xAuthToken = xAuthToken; _name = name; _password = password; _url = url; _domainUuid = domainUuid; }
protected override HttpRequestParams GetHttpRequestParams() { var url = _url + "v3/";
var messageBodyObj = new { auth = new { identity = new { methods = new[] { "password" }, password = new { user = new { domain_id = _domainUuid, name = _name, password = _password } } }, } };
var method = "POST"; var contentType = "application/json"; var messageBody = JsonConvert.SerializeObject(messageBodyObj);
return new HttpRequestParams { Url = url, ContentType = contentType, MessageBody = messageBody, Method = method, }; } }
Листинг 5
public class CreateServerResponse { public string id {get; set;} public DateTime created {get; set;} public string name {get; set;} public string accessIPv4 {get; set;} public string accessIPv6 {get; set;} public string vm_state {get; set;} public string user_Id {get; set;} }
public class CreateServerQuery : QueryBase<CreateServerResponse> { private string _flavorRef; private string _imageRef; private string _name; private string _adminPass; private string _xAuthToken; private string _baseUrl;
public CreateServerQuery(string flavorRef, string imageRef, string name, string adminPass, string xAuthToken, string baseUrl) { _flavorRef = flavorRef; _imageRef = imageRef; _name = name; _adminPass = adminPass; _xAuthToken = xAuthToken; _baseUrl = baseUrl; }
protected override HttpRequestParams GetHttpRequestParams() { var url = _baseUrl + "v3/";
var messageBodyObj = new { server = new { name = _name, imageRef = _imageRef, flavorRef = _flavorRef, adminPass = _adminPass } };
var method = "POST"; var contentType = "application/json"; var messageBody = JsonConvert.SerializeObject(messageBodyObj);
return new HttpRequestParams { Url = url, ContentType = contentType, MessageBody = messageBody, Method = method, XAuthToken = _xAuthToken }; } }
Листинг 6 public class CreateServerQuery: IQuery<CreateServerResponse> { private string _xAuthToken; private string _baseUrl; private string _flavorName; private string _imageName; private string _serverName; private string _adminUrl; private string _adminPass;
public CreateServerByNamesCommand(string xAuthToken, string baseUrl, string adminUrl, string flavorName, string imageName, string serverName, string adminPass) { _xAuthToken = xAuthToken; _baseUrl = baseUrl; _flavorName = flavorName; _imageName = imageName; _serverName = serverName; _adminUrl = adminUrl; _adminPass = adminPass; } public CreateServerResponse Execute() { var getFlavorsQuery = new GetFlavorQuery(_adminUrl); var flavorsList = getFlavorsQuery.Execute(); var flavor = flavorsList.FirstOrDefault(f => f.name == _flavorName); if (flavor == null) return;
var flavorId = flavor.id;
var getImagesQuery = new GetImagesQuery(_adminUrl); var imagesList = getImagesQuery.Execute(); var image = flavorsList.FirstOrDefault(i => i.name == _imageName); if (image == null) return;
var imageId = image.id;
var createServerQuery = new CreateServerQuery(flavorId, imageId, _serverName, _adminPass, _xAuthToken, _baseUrl); return createServerQuery.Execute(); } }
Популярное: Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (488)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |