\section{Описание программной реализации} \label{sec:Chapter4} \index{Chapter4} %\begin{figure}[htbp] %\centering %\includegraphics[width=0.8\textwidth]{files/UML.png} %\caption{UML диаграмма классов Python} %\label{fig:uml_model} %\end{figure} \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{files/UML.png} \caption{UML-диаграмма классов Python} \label{fig:uml_model1} \end{figure} Табличное представление используется для ввода, но для дальнейшей обработки требуется программная структура, в которой связи между объектами выражены явно. Поэтому данные таблиц должны преобразовываться во внутреннее представление, которое было реализовано в виде набора объектов Python (рис. \ref{fig:uml_model1}), соответствующих основным сущностям конфигурации. Такая модель служит центральным представлением, из которого данные могут быть преобразованы в другие форматы. Также необходима разработка механизмов преобразования модели. Основными преобразованиями являются импорт данных из табличного описания во внутреннюю модель, экспорт во входные языки средства развертывания сетевых конфигураций \cite{netloom} и средства построения диаграмм (D2). Программная реализация выполнена на языке Python. Объём написанного кода: 710 строк, 48 килобайт. Код выложен на веб-сервисе Github \cite{github}. На рис. \ref{fig:schema} представлен процесс работы с утилитой. Построение диаграмм происходит с помощью модуля py-d2 (пример на рис. \ref{fig:diagram}). \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{files/diagram.png} \caption{Пример диаграмммы, построенной утилитой} \label{fig:diagram} \end{figure} \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{files/schema.png} \caption{Схема работы программной реализации} \label{fig:schema} \end{figure} Воспроизводимость описания конфигурации обеспечивается тем, что результат хранится в виде структурированных данных. Одна и та же таблица при повторной обработке приводит к построению той же внутренней модели и, соответственно, к одинаковому описанию конфигурации. А преобразование в формат, пригодный для использования в средстве развёртывания сети виртуальных машин, обеспечивает возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин. Пример экспортированного YAML-описания конфигурации сети приведён в листинге~\ref{lst:yaml-config}. % \newpage \lstinputlisting[ language=yaml, caption={Фрагмент YAML-описания конфигурации сети виртуальных машин}, label={lst:yaml-config}, frame=single, framerule=0.4pt, numbers=left, numberstyle=\tiny, basicstyle=\ttfamily\footnotesize, lineskip=-1pt, breaklines=true, columns=fullflexible, keepspaces=true ]{files/topology.yaml} % \lstinputlisting[ % language=yaml, % caption={Фрагмент YAML-описания конфигурации сети виртуальных машин}, % label={lst:yaml-config} % ]{files/topology.yaml} % Таким образом, решение строится не вокруг построения диаграммы, а вокруг формальной модели сетевой конфигурации. Табличное представление используется как способ ввода и редактирования, внутренняя модель — как основа обработки данных, а YAML и диаграмма — как формы представления результата. Такой подход позволяет обеспечить редактируемость, воспроизводимость и возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин.