Connexion: общее описание


Содержание

Connexion: общее описание
License
Цели
Реализация
Модель данных
Преимущества

Список примеров

1. Простые сетевые настройки

Connexion: общее описание

License

Copyright (c) 2007 Connexion project, Peter V. Saveliev.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found on the GNU site[1].

Цели

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

Ниже перечислены конкретные цели, которые стоят перед проектом. Некоторые из них достигнуты, некоторые находятся в процессе реализации.

  • управление узлом (машиной), равно как и набором узлов (доменом управления)

  • многоинтерфейсный доступ (в пределах разумного -- веб, консоль)

  • возможность отката по ошибке в гарантированно рабочее состояние, либо выполнение заранее определённого кода в результате ошибки

  • подключение внутренних (нативных) модулей равно как и внешних (скрипты, исполняемые файлы)

  • разграничение доступа операторов к наборам модулей

Реализация

Среда Connexion состоит из следующих компонент:

Ядро системы

Ядро, программа под названием connexion, осуществляет связь между всеми компонентами системы и всю высокоуровневю логику работы, необходимую для функционирования модулей.

Модули и сервисы

Программные компоненты, непосредственно реализующие логику работы с ОС. Инкапсулируя в себе конкретные вызовы утилит, они позволяют предоставить пользователю через интерфейс Connexion одинаковый набор команд для настройки одинаковой функциональности на разных системах.

Интерфейсы

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

Модель данных

Для представления данных Connexion использует дерево, где каждый узел образован командой соответствующего ей модуля. Узлы могут быть уникальны в пределах всего дерева (таков, например, интерфейс loopback), могут быть уникальны в пределах одной ветви (скорость работы интерфейса ethernet), могут быть не уникальны (адреса на интерфейсах). Ветвь дерева, в которой доступна команда, может быть строго определена (все интерфейсы доступны в ветви interfaces), а может случиться так, что команда доступна в любой ветви (команда фильтрации on). Все эти свойства команд управляются модулями, в которых они описаны.

В общем случае, при обработке команд ядро Connexion рекурсивно обходит все узлы дерева, по пути формируя так называемое «окружение» и вызывая соответствующие методы команд. Каждый узел на пути обходчика дерева привносит что-либо в окружение, и это становится доступным или дочерним узлам, или родительским. Взаимодействуя друг с другом, узлы дерева формируют описание системы, которое, в итоге, принимает вид шелл-кода и исполняется сервисами. Результат выполнения может быть перенаправлен в пользовательский интерфейс.

Ниже приведён пример описания простых сетевых настроек. Ещё раз напомним, что за каждый узел этого дерева отвечат своя команда и свой модуль. Это позволяет повторно использовать, например, код обрабоки инструкций address в разных интерфейсах, а код поиска подходящего IP-пакета как в ветвях управления шейпингом, так и в ветвях брандмауэра.

Пример 1. Простые сетевые настройки

!
! Со знака "!" начинаются комментарии. На самом деле,
! знак "!" тоже является командой, описан в отдельном
! модуле и строка после него — это параметры команды.
!
configure network
	!
	interfaces
		!
		ethernet 0
			address 10.0.0.1/24
			address 10.0.0.2/24
		!
		loopback
			enable
	!
	routing
		table main
			route 192.168.0.0/16 via 10.0.0.127
			route default via 10.0.0.128
		    

Преимущества

  • Простота и стабильность протоколов и API. Для работы с интерфейсами Connexion использует XML-RPC, чрезвычайно простой протокол, реализованный для большинства языков программирования. Это означает, что интерфейс может быть написан на любом удобном разработчику языке, а стабильность RPC API гарантирует, что изменения ядра не потребуют переработки логики уже написанного кода. Помимо этого, планируется предоставление доступа к ядру через шину Dbus.

    То же самое относится и к модулям. Высокий уровень абстракции и стабильность API позволяет писать модули, рассчитывая на их применение вне зависимости от изменений программ-интерфейсов.

  • Обобщённая модель данных. Хранение данных в дереве — давний и проверенный способ абстракции, позволяющий в случае Connexion рассчитывать на высокий процент повторного использования кода за счёт применений одних и тех же модулей в разных ветвях дерева.

  • Проверка типов данных. Ядро Connexion не просто хранит и обрабатывает данные, запуская соответствующие методы команд, образующих узлы дерева. Оно предоставляет механизм обработки параметров, переданных командам, а также автоматическую проверку соответствия типам данных. Команда, ожидающая увидеть в качестве первого параметра, например, IP-адрес, гарантировано получит именно IP-адрес. Все прочие значения будут отвергнуты ядром.