NetBoxの簡易導入（VirtualBox+vagrant+docker）

# 背景
[前回の記事](https://qiita.com/mizuya_37/items/3ea0e8cca95fe75d17f4)にて、VirtualBox+Vagrantを用いた（単純な）サーバの自動構築が出来た。
ただ、vagrantfileには必要最低限の情報のみ記載していたので、今後、他の検証で使えるようにするためにも、もう少し実用的な内容にする必要がある。

別ツールで触ってみたいものがあったため、その環境をvagrantを使いつつ構築してみようと思う。

# NetBox（別ツールとは？）
NetBoxとは、IPアドレス管理（IPAM）及び、データセンターインフラストラクチャ管理（DCIM）を行うことが出来るOSSのツールである。
詳しくは下記の通り。
https://github.com/netbox-community/netbox

IPアドレスや、データセンタのラックや搭載機器等の物理周りをドキュメントで管理するのは限界があるので、こういったツールがあると便利だなと思い、実際に触ってみたく今回構築をしてみる。


# 参考サイト
今回、下記サイトを参考に構築を行った。
正直、vagrantで無理にやらなくても、下記サイト(項番1)を見てもらえれば簡単にnetboxのおためしは可能です。（NetBoxのDockerイメージがあるので尚更簡単に導入できます。）


1. ["Netbox を dockerで動かす - CentOS7"(Qiita)](https://qiita.com/ainamori/items/23c0b8567ccbd99fc242)
1. [Github：netbox-docker](https://github.com/netbox-community/netbox-docker)


# 今回の範囲
（NetBoxのdockerイメージを使うので、出来物を利用する形ですが）vagrantfileに設定を記載して、「vagrant up」と打てばNetBoxの環境が構築できるところまでが範囲となります。
※NetBoxの説明は本記事ではしないです。

# 環境
- windows 10
- VirtualBox 6.0.20
- Vagrant 2.2.7
- docker
- docker-compose 1.23.1
- netbox

# VagrantでのVM+Docker+NetBox導入
### 導入手順

[前回の記事](https://qiita.com/mizuya_37/items/3ea0e8cca95fe75d17f4#vagrantfile%E3%81%AB%E6%A7%8B%E6%88%90%E6%83%85%E5%A0%B1%E3%81%AE%E4%BD%9C%E6%88%90)の通り、作成済みのVagrant用のフォルダにて、仮想マシン用にフォルダを作成して、そのフォルダにて下記コマンドを実行する。

```cmd:コマンドプロンプト
> vagrant init
```

実行後、コマンドを実行したフォルダにvagrantfileが作成されるため、下記内容に上書きする。

```vim:vagrantfile
Vagrant.configure("2") do |config|
  # ローカルのvagrant box登録イメージから"centos7.4"の名前を探し、有ればそれを利用
  # 無ければ、"vagrantcloud.com"からダウンロードしてvagrant boxに登録後、そのイメージファイルを利用
  config.vm.box = "centos7.4"
  config.vm.box_url = "https://vagrantcloud.com/centos/boxes/7/versions/1803.01/providers/virtualbox.box"

  # ネットワークIF（192.168.9.10）をVMに設定
  config.vm.network "private_network", ip: "192.168.9.10"

  # VMの設定
  config.vm.provider "virtualbox" do |vb|
    # VMのGUI有無（false:無し）
    vb.gui = false
    # VirtualBoxのVM名
    vb.name = "centos74:netbox"
    # VMのスペック（メモリ：1GB　CPU：1コア）
    vb.memory = "1024"
    vb.cpus = 1
  end

  # VM構築後のOS上で下記コマンドを実行（初回実行時のみ）
  # 内容は参考サイトを参照ください。
  # 簡単に記載すると、
  #  docker、docker-compose関連のインストール
  #  netbox-dockerイメージの取得とビルド、一部設定変更
  config.vm.provision "shell", inline: <<-SHELL
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install -y docker-ce
    systemctl start docker
    docker run hello-world
    sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    yum install -y git
    git clone https://github.com/netbox-community/netbox-docker.git
    cd /home/vagrant/netbox-docker
    /usr/local/bin/docker-compose build
    sed -i -e 's/8080/80:8080/g' ./docker-compose.yml
  SHELL

  # VM構築後＆VM起動時にOS上で下記コマンドを実行
  config.vm.provision "shell", run: "always", inline: <<-SHELL
    systemctl start docker
    cd /home/vagrant/netbox-docker
    /usr/local/bin/docker-compose up -d
  SHELL
end
```

保存したら、下記コマンドを実行して、NetBoxが上がるのを待つ。（ちょっと時間がかかります）

```cmd:コマンドプロンプト
> vagrant up
```

実施手順としては以上です。

### vagrantfileの説明
実行することで、

- centos7.4のboxイメージをvagrantに登録（事前の登録不要、登録済みでも可、再利用可能）
- virtualbox上に"centos74:netbox"の名前でVM作成
- スペック：CentOS7.4　メモリ＝1GB、CPU＝1コア
- IPアドレス：192.168.9.10
- VM上には、dokcer + docker-compose + NetBoxが導入

が構築される。

vagrantfileの内容については、上記のコメントを参照して貰えればと思いますが、
ポイントとしては、
仮想VMのOS上でのdokcer + docker-compose + NetBoxが導入箇所となる。

下記の記載箇所に導入に必要なコマンドを記載することで、OS上で
　"root"権限
にてコマンドを実行していくため、[参考サイト](https://qiita.com/ainamori/items/23c0b8567ccbd99fc242)の手順を記載している。

```vim:vargrantfile
  config.vm.provision "shell", inline: <<-SHELL
  end
```

#### 注意点
provisionに記載のコマンドは、VM構築時（初回のvagrant up実行時）のみ、コマンドを実行するため、例えば、OS停止 ⇒ 起動（vagrant up）を行った場合は、コマンドは実行されない。

今回、OS上にdocker自動起動、netbox-docker自動起動の設定・仕組みを入れていないので、このままだと、再度"vagrant up"にて起動をかけた際には、OSにログインをしてコマンドを打つ必要が出る。
そのため、docker起動、netbox-docker起動のコマンドは、下記の記載箇所に、コマンドを記載している。
「run: "always"」オプションは、「vagrant up」を実行する度に、コマンドを実行するものとなる。

```vim:vargrantfile
  config.vm.provision "shell", run: "always", inline: <<-SHELL
  end
```


# NetBoxを触ってみる
NetBoxには"http://(VMのIPアドレス)"でアクセスでき、
　ID：admin　PW：admin
でログインが可能です。


# 終わりに

NetBoxの利用については、機会あれば別記事で。
その前に、今回も踏まえつつ、vagrantfileの設定内容（例えば複数台とか、複数IFとか）を整理するかと思います。