네트워크 구성도의 자동 작성을 목표로! (4)

Fate의 열이 식지 않고, Fate/SN UBW의 블루 레이를 빌려 계속보고있는 Fortran입니다. 징수하지 않고 계속을 써 갑니다.
이번에는 MySQL에 저장된 데이터에서 nwdiag가 해석할 수 있도록 config 파일을 만들고 네트워크 구성도를 export할 때까지의 과정을 만들어 갑니다.

실험



실험 데이터


  • MySQL에 미리 아래와 같은 데이터를 insert 해 둡니다.
  • 이 두 VLAN에 대해 nwdiag config를 만들 수 있는지 실험합니다.
  • 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 데이터


  • nwdiag 공식 doc : htp : ///bぉckぢ아g. 코 m/그럼/응 wぢ아 g/
  • 공식 페이지의 사례를 인용하면, 아래의 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
    



    이것으로 네트워크 구성도가 만들어지는 흐름은 할 수 있었습니다.

    이제 오시마?



    아직 제작이 부족한 점이 많이 있기 때문에, 과제점을 하나씩 부수고 싶습니다. 개량점을 수시로, 기사로서 만들어 가려고 생각하므로, 앞으로도 잘 부탁드리겠습니다.

    좋은 웹페이지 즐겨찾기