Netbox と Ansible と Gitlabでネットワーク機器のコンフィグ取得(その１:インストール)

Netboxで機器を管理して、その情報をつかって自動でコンフィグ保存を定期的に実行する環境を作ったメモ

今回は、Netbox と Ansible と Gitlabのインストールまで記載してます

# 動作イメージ
各ソフトウェアと全体的な動作のは以下のイメージで、Netboxでネットワーク機器を管理して、GitLabからAnsibleをつかってコンフィグ取得して最終的にGitLab内にコンフィグ保存させようとしました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/4a1fd527-58e5-40b7-b1a7-ce7f8475b6a1.png)

# 今回の確認環境
Ubuntu 24.04.1 LTS で構築しました
(ネットワークシュミレータ上に作りました)

以下のようにサーバ以外にコンフィグ取得対象のネットワーク機器として vJunosEvolved と VyOS をつなげてます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/878cf8dc-a04b-450a-b98b-f6c1b24d2ce8.png)

Ubuntuのサーバは以下を参考にしてください、今回はUbuntu 24.04.1のISOファイルをダウンロードを事前にしてサーバ構築を行いました

https://qiita.com/k-maki/items/20c4039db1636c8ad6a9#-2-%E3%82%B5%E3%83%BC%E3%83%90ubuntu%E3%81%AE%E6%BA%96%E5%82%99





# GitLab のインストール

以下の内容を参考にさせていただき実施

https://zenn.dev/hr0t15/articles/98e421ccc894a9

設定内容だけ抜粋します
今回はポート番号9000でWeb GUIにアクセスできるように設定しています。
```
apt-get update

apt install -y curl openssh-server ca-certificates tzdata perl

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash

EXTERNAL_URL="http://localhost:9000" apt-get install gitlab-ce

gitlab-ctl reconfigure
```
これでインストールは終了になります。初期パスワードは以下のファイルで確認できます
```
more /etc/gitlab/initial_root_password
```
ブラウザから`http://<サーバーのIP>:9000`へアクセスすると、ログイン画面が表示されるので、ユーザ名：`root`、パスワードは上記で確認した初期パスワードからログインできます。

# GitLab Runnerのインストール
GitLab で CI/CDパイプラインを実行するためにGitLab Runnerのインストールします。
今回はこの機能をつかってGitLab上でAnsibleのPlaybookを実行させます。

以下の内容を参考にさせていただきインストール実施

https://gitlab-docs.creationline.com/runner/install/linux-repository.html#installing-gitlab-runner

設定内容だけ抜粋
```
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | bash

apt-get update

apt-get install gitlab-runner
```

# Netbox のインストール
通常のインストールだと、Netbox以外にPostgreSQL・Redis・nginxなどもインストールが必要で手間のため、今回はDockerを利用しました

## Dockerをインストール
以下の内容を参考にさせていただき実施

https://docs.docker.com/engine/install/ubuntu/#installation-methods

設定内容だけ抜粋
```
# Add Docker's official GPG key:
apt-get update

apt-get install ca-certificates curl

install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update

apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

## NetBox の Docker イメージをインストール
以下の内容を参考にさせていただき実施

https://github.com/netbox-community/netbox-docker

まずは以下を実施
```
git clone -b release https://github.com/netbox-community/netbox-docker.git

cd netbox-docker
```

以下の内容で起動するように`docker-compose.override.yml`を作成する
- 今回はポート番号8000でWeb GUIにアクセスできるように設定しています
- サーバ再起動時に自動で起動するようにする

```:docker-compose.override.yml
services:
  netbox:
    ports:
      - "8000:8080"
    restart: always
  netbox-worker:
    restart: always
  netbox-housekeeping:
    restart: always
  postgres:
    restart: always
  redis:
    restart: always
  redis-cache:
    restart: always
```

Docker Compose でDocker イメージをインストールと合わせてバックグラウンドで起動します

```
docker compose up -d
```

次にNetbox用のユーザ作成します
今回は仮でユーザ名とパスワードともに`netbox`にしてます

```
docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser
```


```:設定時の画面
# docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser
🧬 loaded config '/etc/netbox/config/configuration.py'
🧬 loaded config '/etc/netbox/config/extra.py'
🧬 loaded config '/etc/netbox/config/logging.py'
🧬 loaded config '/etc/netbox/config/plugins.py'
Username: netbox
Email address:
Password:netbox
Password (again):netbox
This password is too short. It must contain at least 12 characters.
Password must have at least one numeral.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
#
```

ブラウザから`http://<サーバーのIP>:8000`へアクセスすると、ログイン画面が表示されるので、ユーザ名/パスワード`netbox`でログインできます。

# Ansible のインストール
pipを使ってインストールします

```
apt-get install pip

pip install ansible --break-system-packages
```

SSH用に`paramiko`と`ansible-pylibssh`をインストールしておきます
```
pip install paramiko --break-system-packages
pip install ansible-pylibssh --break-system-packages
```

# 次回
ここまででインストール終了です
次回は、Netbox・Ansible・GitLabの設定書きます

https://qiita.com/k-maki/items/d7a29583b0bf5c2f5765