VagrantでUbuntu18.04のVMを作り、そのVMの中にDevStackでOpenStackを作成する作業

# 目的
OpenStackの勉強のために、Virtualbox (Vagrant) のGuest OS (ubuntu18.04)に、OpenStackをDevStackを使ってinstallする。

# Ref.
https://docs.openstack.org/devstack/latest/
https://qiita.com/feifo/items/0fde474005589afcff68
https://github.com/rafiror/openstack/wiki/Devstack%E5%85%A5%E9%96%80

# VagrantでUbuntu18.04のVMを作成
cpuは2個、memoryは5Gを割り当て。virutalboxのpublic_networkを使う。

```bash:bash
### vagrant用のdirectoryを作成
$ mkdir devstack && cd devstack

### Vagrantfileを生成
$ vagrant init bento/ubuntu-18.04

### Vagrantfileを編集。メモリ量とhost OS側からguest OS(ubuntu18.04)へのアクセス用のIP addressを設定。
$ vi Vagrantfile
### 以下を修正
  ### 以下をコメントイン (VirtualboxのPublic Networkを使う)
  config.vm.network "public_network"

  ### 以下をコメントイン
  config.vm.provider "virtualbox" do |vb|

  ### 以下を追加
     vb.memory = "5120"
     vb.cpus = 2
  ### 以下をコメントイン
  end

### VMを立ち上げる
$ vagrant up

### VMに接続
$ vagrant ssh

### network IFのip addressを確認しておく (後ほどdevstack install時にHost OS側からアクセス可能なeth1を使う)
vagrant@vagrant:~$ ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.20.10.3  netmask 255.255.255.240  broadcast 172.20.10.15
        inet6 fe80::a00:27ff:feed:f7dd  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ed:f7:dd  txqueuelen 1000  (Ethernet)
        RX packets 4469  bytes 480623 (480.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5407  bytes 7605086 (7.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
vagrant@vagrant:~$

```

# Ubuntu上でOpenStackをinstallする
devstackの本家サイトに従ってinstallしていく

```bash:bash
### aptのrepogitryを最新化
vagrant@vagrant:~$ sudo apt-get update

### gitをinstall
vagrant@vagrant:~$ sudo apt-get install git

### 本家サイトに従ってstackユーザを作る
vagrant@vagrant:~$ sudo useradd -s /bin/bash -d /opt/stack -m stack

### stackユーザを、sudoでpasswordを聞かれないようにする
vagrant@vagrant:~$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
stack ALL=(ALL) NOPASSWD: ALL

### stackユーザになる
vagrant@vagrant:~$ sudo su - stack
stack@vagrant:~$

### devstackをgitで取ってくる
stack@vagrant:~$ git clone https://opendev.org/openstack/devstack
stack@vagrant:~$ cd devstack/

### local.confをsampleから作成
stack@vagrant:~/devstack$ cp samples/local.conf .

### local.confを編集
stack@vagrant:~/devstack$ vi local.conf 
### ADMIN_PASSWORDを設定。
### DATABASE_PASSWORDやRABBIT_PASSWORDはADMIN_PASSWORDと同じに設定。
### HOST_IPのコメントアウト解除。
### 値は仮想マシンのIPアドレス(172.20.10.3)を設定。
### FLAT_INTERFACE=eth1を設定。

### 設定結果の確認
stack@vagrant:~/devstack$ diff local.conf samples/local.conf
28,30c28,30
< ADMIN_PASSWORD=secret
< DATABASE_PASSWORD=$ADMIN_PASSWORD
< RABBIT_PASSWORD=$ADMIN_PASSWORD
---
> ADMIN_PASSWORD=nomoresecret
> DATABASE_PASSWORD=stackdb
> RABBIT_PASSWORD=stackqueue
40c40
< HOST_IP=172.20.10.3
---
> #HOST_IP=w.x.y.z
43d42
< FLAT_INTERFACE=eth1
stack@vagrant:~/devstack$

### devstackをinstall
stack@vagrant:~/devstack$ ./stack.sh

### CLIのopenstackコマンドを使う際の環境変数を読み込み。
stack@vagrant:~/devstack$ source openrc 
```

# openstackへアクセス
http://172.20.10.3へアクセス
ID: admin Password: secret

# login画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/a5575fcb-2a41-da67-601f-308dc358f390.png)

# login後の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/8666e870-2b49-025a-e890-0e5823dee568.png)

# networkの状態の確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/e09ed3f2-1b1a-870f-f91e-da95da86326e.png)

# key pairの作成
virtualboxのguest osのubuntu18.04側で鍵を生成

```bash:bash
### sshの鍵生成 (とりあえずstackユーザで作った）
stack@vagrant:~$ ssh-keygen
stack@vagrant:~$ cat .ssh/id_rsa.pub
# ここに出力される公開鍵をコピー
```

以下のように、鍵をopenstackに登録する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/4baa80e7-3fdc-77e1-682f-d03d6b03427f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/5faae907-adb9-b99a-992a-01cbd8281873.png)

# security groupの作成
以下のようにsecurity groupを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/38c50f01-7d58-5863-6404-4ab5e9916d80.png)

# instanceを作ってみる。
以下の様な流れでinstanceを作ってみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/b85f3efc-140d-27c4-2a3f-ad6932163025.png)

イメージはdefaultで登録されているcirrosを使う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/60410dc0-d418-f7a5-9e2b-3e59e77d4464.png)

フレーバーを選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/53f58606-f9f9-e9bd-bb84-558caabca61a.png)

VMが所属するネットワークを選ぶ。privateを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/f945afa2-746b-a42f-d737-9950de11b1dc.png)

VMに当てるセキュリティグループを選ぶ。先ほど作ったtestを選ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/4fec6fec-3775-5d0d-3ae7-f2b207c8ca2c.png)

VMに登録するsshの公開鍵を選ぶ。先ほどopenstackに登録した鍵を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/661ce11a-0fba-a66c-1035-611566be87df.png)

以下の様にVMが作成できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/06c56a45-826b-0497-06fc-1b8d0545153e.png)

作ったVMにfloating IPを割り当てる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/8fb165c3-efa6-d59e-09c9-b5747a608f23.png)

以下の様な感じ。もしfloating IPがなければ、プラスボタンを押して新たにfloating ipを作る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/5df9475a-4b0c-d639-0d2a-bc310b1d0f4d.png)

以下の様にfloating IPが設定できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/993c34ae-37ea-69a9-9670-5225ed40b869.png)

作ったVMにssh接続（floating IPにssh)

```bash:bash
stack@vagrant:~$ ssh cirros@172.24.4.202
$ # 接続できた。
```

# まとめ
以上です。残課題として、VirtualboxのHostOS (自分の場合はMac OS)からOpenStackで作成したVMにアクセスできてないです。誰かやり方がわかる方がいらっしゃったら教えてもらえると幸いです。