네트워크 구성도의 자동 작성을 목표로! (4)
이번에는 MySQL에 저장된 데이터에서 nwdiag가 해석할 수 있도록 config 파일을 만들고 네트워크 구성도를 export할 때까지의 과정을 만들어 갑니다.
실험
실험 데이터
mysql> select * from config_data where vlan='VLAN100';
+------------+------+---------------+---------+------------+
| IP_ADDRESS | HOST | NETMASK | VLAN | NW_ADDRESS |
+------------+------+---------------+---------+------------+
| 1.1.1.1 | web1 | 255.255.255.0 | VLAN100 | 1.1.1.0/24 |
| 1.1.1.2 | web2 | 255.255.255.0 | VLAN100 | 1.1.1.0/24 |
| 1.1.1.3 | web3 | 255.255.255.0 | VLAN100 | 1.1.1.0/24 |
+------------+------+---------------+---------+------------+
3 rows in set (0.00 sec)
mysql> select * from config_data where vlan='VLAN10';
+------------+------+---------------+--------+---------------+
| IP_ADDRESS | HOST | NETMASK | VLAN | NW_ADDRESS |
+------------+------+---------------+--------+---------------+
| 172.23.0.1 | web1 | 255.255.255.0 | VLAN10 | 172.23.0.0/24 |
| 172.23.0.2 | web2 | 255.255.255.0 | VLAN10 | 172.23.0.0/24 |
| 172.23.0.3 | web3 | 255.255.255.0 | VLAN10 | 172.23.0.0/24 |
+------------+------+---------------+--------+---------------+
3 rows in set (0.00 sec)
nwdiag config 데이터
example.diag
nwdiag {
network dmz {
address = "210.x.x.x/24"
web01 [address = "210.x.x.1"];
web02 [address = "210.x.x.2"];
}
network internal {
address = "172.x.x.x/24";
web01 [address = "172.x.x.1"];
web02 [address = "172.x.x.2"];
db01;
db02;
}
}
소스 코드
다음과 같은 Perl 스크립트와 쉘 스크립트를 조합하여 실험을 실시했습니다.
흠, 힘차게라고 밖에 말할 수 없는 소스입니다…
nwdiag.sh
#!/bin/bash
echo "nwdiag {"
./nwdiag.pl VLAN10
./nwdiag.pl VLAN100
echo "}"
nwdiag.pl
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $vlan = $ARGV[0];
my $db = 'DBI:mysql:nw_config';
my $user = '******';
my $pass = '*******';
#データベースに接続
my $dbh = DBI->connect($db, $user, $pass);
#データの選択
my $sql = "select host, ip_address from config_data where vlan='$vlan'";
my $sth = $dbh->prepare($sql);
$sth->execute;
#データの個数をチェック
my $rv = $sth->rows;
my $data = $sth->fetchall_arrayref();
if($rv >= 1) {
&nwdiag_start($vlan);
foreach my $value (@$data){
&nwdiag_data($value->[0], $value->[1])
}
&nwdiag_end;
} else {
print "[ERROR] NO VLAN-ID\n";
}
$sth->finish;
$dbh->disconnect;
sub nwdiag_start{
my $V=$_[0];
print " network $V {\n";
}
sub nwdiag_data{
print " $_[0] [address = ".$_[1]."] \n";
}
sub nwdiag_end{
print " }\n";
}
실험 결과
#./nwdiag.sh > test.diag
# cat test.diag
nwdiag {
network VLAN10 {
web1 [address = 172.23.0.1]
web2 [address = 172.23.0.2]
web3 [address = 172.23.0.3]
}
network VLAN100 {
web1 [address = 1.1.1.1]
web2 [address = 1.1.1.2]
web3 [address = 1.1.1.3]
}
}
이 명령으로 test2.png를 FFFTP 등의 FTP 툴을 사용해, 이미지를 로컬로 열면 아래와 같은 그림이 되어 있는 것을 알 수 있습니다.
# nwdiag test2.diag -o test2.png
이것으로 네트워크 구성도가 만들어지는 흐름은 할 수 있었습니다.
이제 오시마?
아직 제작이 부족한 점이 많이 있기 때문에, 과제점을 하나씩 부수고 싶습니다. 개량점을 수시로, 기사로서 만들어 가려고 생각하므로, 앞으로도 잘 부탁드리겠습니다.
Reference
이 문제에 관하여(네트워크 구성도의 자동 작성을 목표로! (4)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Fortran/items/ff3589812d50fbb34f9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(네트워크 구성도의 자동 작성을 목표로! (4)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Fortran/items/ff3589812d50fbb34f9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)