wip
@@ -53,7 +53,7 @@
|
|||||||
\label{fig:ensp}
|
\label{fig:ensp}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Эти решения ближе к реальной настройке сети, чем универсальные диаграммеры: они позволяют нарисовать топологию (а также) моделировать поведение сетевых устройств. Однако их назначение далеко от цели данной работы. Диаграммеры в их составе ориентированы на описание сети на основе оборудования конкретного производителя, а не на универсальное формализованное описание конфигурации сети виртуальных машин для лабораторных стендов.
|
Эти решения ближе к реальной настройке сети, чем универсальные диаграммеры: они позволяют нарисовать топологию сетевых устройств, однако их назначение далеко от цели данной работы. Диаграммеры в их составе ориентированы на описание сети на основе оборудования конкретного производителя, а не на универсальное формализованное описание конфигурации сети виртуальных машин для лабораторных стендов.
|
||||||
|
|
||||||
\subsection{Генераторы диаграмм}
|
\subsection{Генераторы диаграмм}
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
\label{fig:graphviz}
|
\label{fig:graphviz}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.8\textwidth]{files/plantuml.png}
|
\includegraphics[width=0.8\textwidth]{files/plantuml.png}
|
||||||
\caption{Диаграмма сети в PlantUML}
|
\caption{Диаграмма сети в PlantUML}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Исходя из результатов обзора, в качестве пользовательской формы задания конфигурации выбрано табличное представление. Такая форма представления удобна тем, что позволяет явно фиксировать элементы сети и их атрибуты, редактировать отдельные значения и проверять заполненность полей. При этом она допускает частично заданные конфигурации: часть параметров может быть указана сразу, а часть оставлена пустой для последующего уточнения.
|
Исходя из результатов обзора, в качестве пользовательской формы задания конфигурации выбрано табличное представление. Такая форма представления удобна тем, что позволяет явно фиксировать элементы сети и их атрибуты, редактировать отдельные значения и проверять заполненность полей. При этом она допускает частично заданные конфигурации: часть параметров может быть указана сразу, а часть оставлена пустой для последующего уточнения.
|
||||||
|
|
||||||
При разработке табличного представления конфигурации сети виртуальных машин рассматривались два варианта организации данных: представление в первой нормальной форме (далее - 1НФ) и представление в третьей нормальной форме (далее - 3НФ). Оба варианта позволяют структурированно описать сеть, однако различаются сложностью редактирования данных в случае непосредственной работы с таблицами. Вторая нормальная форма отдельно не рассматривалась как самостоятельный вариант представления, поскольку для данной задачи она является промежуточным этапом между компактным пользовательским описанием и полностью разнесённой структурой данных.
|
При разработке табличного представления конфигурации сети виртуальных машин рассматривались два варианта организации данных: представление в первой нормальной форме (далее~-- 1НФ) и представление в третьей нормальной форме (далее~-- 3НФ). Оба варианта позволяют структурированно описать сеть, однако различаются сложностью редактирования данных в случае непосредственной работы с таблицами.
|
||||||
|
|
||||||
Разберём оба представления на примере топологии, изображённой на рисунке~\ref{fig:exmpl1}
|
Разберём оба представления на примере топологии, изображённой на рисунке~\ref{fig:exmpl1}
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ PC4.eth1 & 10.0.0.4/24 \\
|
|||||||
\label{tab:3nf3}
|
\label{tab:3nf3}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\subsubsection*{Выбор формы}
|
\subsubsection*{Выбор представления}
|
||||||
|
|
||||||
В качестве основного пользовательского представления была выбрана первая нормальная форма. Она удобнее в сравнении с 3НФ для ручного заполнения, проще воспринимается при описании лабораторных стендов и не требует постоянного перехода между большим количеством связанных таблиц.
|
В качестве основного пользовательского представления была выбрана первая нормальная форма. Она удобнее в сравнении с 3НФ для ручного заполнения, проще воспринимается при описании лабораторных стендов и не требует постоянного перехода между большим количеством связанных таблиц.
|
||||||
|
|
||||||
|
|||||||
@@ -8,43 +8,68 @@
|
|||||||
%\label{fig:uml_model}
|
%\label{fig:uml_model}
|
||||||
%\end{figure}
|
%\end{figure}
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
|
||||||
\centering
|
|
||||||
\includegraphics[width=0.8\textwidth]{files/schema.png}
|
|
||||||
\caption{Процесс работы}
|
|
||||||
\label{fig:schema}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
Табличное представление используется для ввода, но для дальнейшей обработки требуется программная структура, в которой связи между объектами выражены явно. Поэтому данные таблиц должны преобразовываться во внутреннее представление, например в набор объектов Python (рисуок \ref{fig:uml_model1}), соответствующих основным сущностям конфигурации. Такая модель служит центральным представлением, из которого данные могут быть преобразованы в другие форматы.
|
\begin{figure}[H]
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.8\textwidth]{files/UML.png}
|
\includegraphics[width=1\textwidth]{files/UML.png}
|
||||||
\caption{UML диаграмма классов Python}
|
\caption{UML-диаграмма классов Python}
|
||||||
\label{fig:uml_model1}
|
\label{fig:uml_model1}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
Табличное представление используется для ввода, но для дальнейшей обработки требуется программная структура, в которой связи между объектами выражены явно. Поэтому данные таблиц должны преобразовываться во внутреннее представление, которое было реализовано в виде набора объектов Python (рис. \ref{fig:uml_model1}), соответствующих основным сущностям конфигурации. Такая модель служит центральным представлением, из которого данные могут быть преобразованы в другие форматы.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Также необходима разработка механизмов преобразования модели. Основными преобразованиями являются импорт данных из табличного описания во внутреннюю модель, экспорт во входные языки средства развертывания сетевых конфигураций и средства построения диаграмм. YAML-файл в этом случае используется как структурированное описание, пригодное для дальнейшей обработки программами, вроде Netloom \cite{netloom} для поднятия сети из виртуальных машин, а D2 может применяться для генерации визуального представления сети на основе уже построенной модели.
|
Также необходима разработка механизмов преобразования модели. Основными преобразованиями являются импорт данных из табличного описания во внутреннюю модель, экспорт во входные языки средства развертывания сетевых конфигураций и средства построения диаграмм. YAML-файл в этом случае используется как структурированное описание, пригодное для дальнейшей обработки программами, вроде Netloom \cite{netloom} для поднятия сети из виртуальных машин, а D2 может применяться для генерации визуального представления сети на основе уже построенной модели.
|
||||||
|
|
||||||
Программная реализация средства описания конфигурации сети виртуальных машин выполнена на языке Python. Объём написанного кода: 710 строк, 48 килобайт. Код выложен на веб-сервисе Github \cite{github}. На рисунке \ref{fig:schema} представлен основной процесс работы с утилитой. Построение диаграмм происходит с помощью модуля py-d2 (пример на рисунке \ref{fig:diagram}).
|
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
Программная реализация выполнена на языке Python. Объём написанного кода: 710 строк, 48 килобайт. Код выложен на веб-сервисе Github \cite{github}. На рисунке \ref{fig:schema} представлен основной процесс работы с утилитой. Построение диаграмм происходит с помощью модуля py-d2 (пример на рис \ref{fig:diagram}).
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.8\textwidth]{files/diagram.png}
|
\includegraphics[width=0.8\textwidth]{files/schema.png}
|
||||||
|
\caption{Схема работы программной реализации}
|
||||||
|
\label{fig:schema}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=1\textwidth]{files/diagram.png}
|
||||||
\caption{Пример диаграмммы, построенной утилитой}
|
\caption{Пример диаграмммы, построенной утилитой}
|
||||||
\label{fig:diagram}
|
\label{fig:diagram}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
Воспроизводимость описания конфигурации обеспечивается тем, что результат хранится в виде структурированных данных. Одна и та же таблица при повторной обработке приводит к построению той же внутренней модели и, соответственно, к одинаковому описанию конфигурации. А преобразование в формат, пригодный для использования в средстве развёртывания сети виртуальных машин, обеспечивает возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин.
|
Воспроизводимость описания конфигурации обеспечивается тем, что результат хранится в виде структурированных данных. Одна и та же таблица при повторной обработке приводит к построению той же внутренней модели и, соответственно, к одинаковому описанию конфигурации. А преобразование в формат, пригодный для использования в средстве развёртывания сети виртуальных машин, обеспечивает возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин.
|
||||||
|
|
||||||
|
|
||||||
\todo[inline]{вынести в отдельное приложение?}
|
\todo[inline]{вынести в отдельное приложение?}
|
||||||
|
|
||||||
|
|
||||||
Пример экспортированного YAML-описания конфигурации сети приведён в листинге~\ref{lst:yaml-config}.
|
Пример экспортированного YAML-описания конфигурации сети приведён в листинге~\ref{lst:yaml-config}.
|
||||||
|
|
||||||
\lstinputlisting[
|
\lstinputlisting[
|
||||||
language=yaml,
|
language=yaml,
|
||||||
caption={Фрагмент YAML-описания конфигурации сети виртуальных машин},
|
caption={Фрагмент YAML-описания конфигурации сети виртуальных машин},
|
||||||
label={lst:yaml-config}
|
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}
|
]{files/topology.yaml}
|
||||||
|
|
||||||
|
% \lstinputlisting[
|
||||||
|
% language=yaml,
|
||||||
|
% caption={Фрагмент YAML-описания конфигурации сети виртуальных машин},
|
||||||
|
% label={lst:yaml-config}
|
||||||
|
% ]{files/topology.yaml}
|
||||||
|
|
||||||
% Таким образом, решение строится не вокруг построения диаграммы, а вокруг формальной модели сетевой конфигурации. Табличное представление используется как способ ввода и редактирования, внутренняя модель — как основа обработки данных, а YAML и диаграмма — как формы представления результата. Такой подход позволяет обеспечить редактируемость, воспроизводимость и возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин.
|
% Таким образом, решение строится не вокруг построения диаграммы, а вокруг формальной модели сетевой конфигурации. Табличное представление используется как способ ввода и редактирования, внутренняя модель — как основа обработки данных, а YAML и диаграмма — как формы представления результата. Такой подход позволяет обеспечить редактируемость, воспроизводимость и возможность дальнейшего применения описания при подготовке лабораторных стендов из виртуальных машин.
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 64 KiB |
@@ -1,8 +1,9 @@
|
|||||||
сетевая топология -- "табличное представление (.csv)": ручное задание
|
сетевая топология --> "табличное представление (.csv)": ручное задание
|
||||||
"табличное представление (.csv)" -- внутренняя модель (Python) : преобразование кодом
|
"табличное представление (.csv)" --> внутренняя модель (Python) : разбор
|
||||||
внутренняя модель (Python) -- "диаграмма (.svg)" : преобразование кодом (py-d2)
|
внутренняя модель (Python) --> "описание диаграммы (.d2)" : визуализация
|
||||||
внутренняя модель (Python) -- "описание для Netloom (.yaml)" : преобразование кодом
|
"описание диаграммы (.d2)" --> "диаграмма (.svg)" : использование D2
|
||||||
"описание для Netloom (.yaml)" -- средство развёртывания сетевой топологии (Netloom) {
|
внутренняя модель (Python) --> "описание для Netloom (.yaml)" : экспорт
|
||||||
|
"описание для Netloom (.yaml)" --> средство развёртывания сетевой топологии (Netloom) {
|
||||||
style.stroke-dash: 5
|
style.stroke-dash: 5
|
||||||
}
|
}
|
||||||
средство развёртывания сетевой топологии (Netloom).style.stroke-dash: 5
|
средство развёртывания сетевой топологии (Netloom).style.stroke-dash: 5
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 24 KiB |
@@ -2,77 +2,25 @@ meta:
|
|||||||
id: topology.yaml
|
id: topology.yaml
|
||||||
name: topology.yaml
|
name: topology.yaml
|
||||||
networks:
|
networks:
|
||||||
- name: NA
|
- name: A
|
||||||
- name: NB
|
|
||||||
- name: NC
|
|
||||||
nodes:
|
nodes:
|
||||||
- role: host
|
- role: host
|
||||||
name: H1
|
name: PC1
|
||||||
interfaces:
|
interfaces:
|
||||||
eth1:
|
eth1:
|
||||||
ip: null
|
ip: 10.0.0.1/24
|
||||||
network: NA
|
network: A
|
||||||
gateway: null
|
|
||||||
index: 1
|
|
||||||
eth2:
|
|
||||||
ip: null
|
|
||||||
network: NB
|
|
||||||
gateway: null
|
|
||||||
index: 2
|
|
||||||
bridges: []
|
|
||||||
vlans: []
|
|
||||||
- role: host
|
|
||||||
name: H2
|
|
||||||
interfaces:
|
|
||||||
eth1:
|
|
||||||
ip: null
|
|
||||||
network: NA
|
|
||||||
gateway: null
|
gateway: null
|
||||||
index: 1
|
index: 1
|
||||||
bridges: []
|
bridges: []
|
||||||
vlans: []
|
vlans: []
|
||||||
- role: host
|
- role: host
|
||||||
name: H3
|
name: PC2
|
||||||
interfaces:
|
interfaces:
|
||||||
eth1:
|
eth1:
|
||||||
ip: null
|
ip: 10.0.0.2/24
|
||||||
network: NA
|
network: A
|
||||||
gateway: null
|
gateway: null
|
||||||
index: 1
|
index: 1
|
||||||
bridges: []
|
bridges: []
|
||||||
vlans: []
|
vlans: []
|
||||||
- role: host
|
|
||||||
name: H4
|
|
||||||
interfaces:
|
|
||||||
eth1:
|
|
||||||
ip: null
|
|
||||||
network: NB
|
|
||||||
gateway: null
|
|
||||||
index: 1
|
|
||||||
bridges: []
|
|
||||||
vlans: []
|
|
||||||
- role: host
|
|
||||||
name: H5
|
|
||||||
interfaces:
|
|
||||||
eth1:
|
|
||||||
ip: null
|
|
||||||
network: NC
|
|
||||||
gateway: null
|
|
||||||
index: 1
|
|
||||||
bridges: []
|
|
||||||
vlans: []
|
|
||||||
- role: host
|
|
||||||
name: H6
|
|
||||||
interfaces:
|
|
||||||
eth1:
|
|
||||||
ip: null
|
|
||||||
network: null
|
|
||||||
gateway: null
|
|
||||||
index: 1
|
|
||||||
eth2:
|
|
||||||
ip: null
|
|
||||||
network: NC
|
|
||||||
gateway: null
|
|
||||||
index: 2
|
|
||||||
bridges: []
|
|
||||||
vlans: []
|
|
||||||
|
|||||||