Генератор конфігурацій для мережевого устаткування і не тільки



Багато зберігають шаблони конфігурацій мережевих пристроїв (прим. та й не тільки мережевих) в звичайних текстових файлах. І коли приходить час налаштовувати нове обладнання, дістають ці файлики і починають в них щось міняти. Повсякденні типові операційні завдання не є винятком і бій з цими завданнями зазвичай ведеться за допомогою файлів-шаблонів конфігурацій. Безумовно, є програми по управлінню мережею, але на жаль їх використовують далеко не всі, тому що багатьом вони не по кишені або завдання по конфігурації обладнання виконуються досить рідко, в зв'язку з чим обґрунтувати покупку такого дуже складно. Хочу запропонувати Вам рішення по реалізації генератора конфігурацій на базі HTML/JS, а так же невеликий набір DIY для швидкого старту.

Деякі адміни пишуть генератори конфігурацій на Bash/Python, а потім навчають перспективного хлопця з техпідтримки користуватися цими «самописними приблудами». Далі передають всю рутину і типові задачі на першу лінію підтримки. Проблема тут лише в тому, що найчастіше, додаток являє з себе чорний екран з миготливим курсором і пропозицією ввести дані строго по порядку і без помилок. Відповідно далі ці дані будуть використовуватися для створення конфігурації або набору команд.

Компанія в якій я працюю, не виняток, і у нас так само вистачає рутинних завдань, які хотілося б спростити і автоматизувати. Було прийнято рішення зробити багатоплатформовий генератор конфігурацій Cisco з GUI. Природно погляд впав на веб-технології, але перспектива піднімати веб-сервер (принаймні на початковому етапі) не дуже радувала. Знайшлися розумні люди, які підказали, що все це можна реалізувати локально на стеку технологій HTML/JS, що я в підсумку і зробив. Деякі частини програми можливо виглядають не дуже елегантно (зокрема зберігання шаблонів), але є і незаперечні плюси, HTML, JS знають майже всі, а якщо і виникнуть труднощі, то їх завжди допоможе вирішити гігантське співтовариство. І так, до справи.

Архітектурно, генератор являє собою веб-сторінку написану на HTML. Шаблони конфігурацій зберігаються у файлах JS у вигляді текстових змінних. Дані заносяться в веб-форму і на їх основі відбувається створення конфігурації. Давайте розберемо як це відбувається на конкретному прикладі.

Для початку давайте поставимо задачу по створенню набору команд для конфігурації VLAN і його IP адреси. Для створення шаблону я взяв такий шматок конфігурації.

interface Vlan555
 
description === LAN ===
 
ip nat inside
 
ip virtual-reassembly in
 
ip address 10.47.3.1 255.255.255.0
 
ip tcp adjust-mss 1442
 
exit


Є проста веб сторінка, яка містить поля введення інформації generator.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Config generator</title>
<!-- ШАБЛОН ПРИСТРОЇ -->
<script src="config_tempalte.js"></script>
</head>
<body>
<div id="newconf" style="padding:20px;">
<!--ФОРМА ДЛЯ ЗАПОВНЕННЯ-->
<h3>Генератор конфігурацій</h3>
<label for="text">Створити VLAN номер:</label>
<input type="text" id="vlan" maxlength="4" placeholder="1234"></b>
<label for="text">Присвоїти VLAN наступний IP адресу:</label>
<input type="text" id="ip" maxlength="15" placeholder="192.168.1.1"> / 
<input type="text" id="mask" maxlength="15" placeholder="255.255.255.0"></b>
<button type="submit" id="confcreate">Створити конфігурацію</button></b></b>
<!--РЕЗУЛЬТАТ-->
<h4>Конфіг для Cisco | <button type="submit" id="download">Завантажити конфіг</button></b></h4>
<div id="config"></div>
</div>
</body>
</html>
<script src="actions.js"></script>

На сторінці підключені два скрипта (в принципі нічого не заважає все писати в одному файлі, але я розділив для наочності):
// обробка введених даних
<script src="actions.js"></script>

Нижче лістинг скрипта actions.js, який взагалі-то міг би бути в два рази менше, але я вирішив додати кнопку завантаження конфігурації у вигляді файлу і з-за цього він розпух. Тим не менш, я думаю, це важлива і потрібна функція, так як конфігурації часто заливаються через tftp.
function begin() {
confcreate.onclick = function() {
var vlan = document.getElementById('vlan');
var ip = document.getElementById('ip');
var mask = document.getElementById('mask');
var config = document.getElementById('config');
var template = config_template;
template = template.replace(new RegExp('{{VLAN}}','g'),vlan.value);
template = template.replace(new RegExp('{{IP_ADDR}}','g'),ip.value);
template = template.replace(new RegExp('{{MASK}}','g'),mask.value);
config.innerHTML = template; 
};

download.onclick = function() {
downloadInnerText('cisco_config.txt', 'config','text/plain');
};

function downloadInnerText(filename, elId, mimeType) {
var el = document.getElementById(elId);
var link = document.createElement('a');
mimeType = mimeType || 'text/plain';
link.setAttribute('download', filename);
link.setAttribute('href', 'data:' + mimeType + ';charset=utf-8' + encodeURIComponent(el.innerText));
link.click(); 
} 
};
document.addEventListener. ("DOMContentLoaded", begin);

//шаблон конфігурації пристрою
<script src="config_tempalte.js"></script>

Шаблон можна скласти по-різному, але обов'язково всі частини конфігурації повинні містяться в змінних. JavaScript сприймає кінець рядка як кінець змінної, тому доводиться екранувати кожну рядок зворотного рисою. До того ж, в кінці кожного рядка додано HTML тег br для правильного відображення конфігурації на сторінці і символ закінчення рядка \n для коректного експорту в тестовий файл. Комусь такий шаблон може здатися не дуже естетичним, але незважаючи на купу «зайвих» символів, створювати шаблони і вносити в нього зміни досить просто. Більшість текстових редакторів мають функцію додавання символів в кінець рядка. Символами {{}} в шаблоні обрамлені місця куди будуть підставлятися дані. Нижче лістинг самого шаблону config_tempalte.js:
var config_template = "\
!===КОНФІГУРАЦІЯ===</b>\n\
conf t</b>\n\
!</b>\n\
interface Vlan{{VLAN}}</b>\n\
description === LAN ===</b>\n\
ip nat inside</b>\n\
ip virtual-reassembly in</b>\n\
ip address {{IP_ADDR}} {{MASK}}</b>\n\
ip tcp adjust-mss 1442</b>\n\
exit</b>\n\
!</b>\n\
wr mem</b>\n\
!</b>\n\
";

Генератор конфігурацій готовий. Створивши три файлу і наповнивши їх вказаними мною рядками ви отримаєте такий додаток:


Основне його завдання, приймати дані через веб-форму, підставляти їх в шаблон, а результат виводити на екран. Всього 65 рядків коду, і ми маємо невелике, але дуже корисний додаток. Створення конфігураційних файлів це справа унікальна і інтимне для кожної конкретної компанії, тому запропонувати готове рішення на всі випадки життя, напевно, неможливо. Ви можете скористатися исходниками що б написати генератор конфігурацій під свої власні потреби.

Основу можна взяти звідси: https://github.com/bravoavo/cisco-config-generator

Зверніть увагу, що це всього лише приклад, на основі якого кожен може зробити для себе програму. Я спробував описати загальний підхід до розв'язання задачі генерації конфігурацій на прикладі обладнання Cisco. JavaScript дуже потужний мову програмування і доклавши трохи зусиль, ви може доопрацювати даний конфігуратор під свої потреби. В додатку, який використовую я, реалізована валідація введеної інформації, генерація паролів, розрахунок часового поясу, IP-адреси і маски мережі. Крім іншого я підключив Bootstrap що б додатку виглядало більш сучасно і JQuery для більшої динаміки та анімації. У моєму випадку це виглядає так:

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.