devstackをvagrantで構築する(2016-01-03)

OpenstackのAPIで遊ぼうと思って、vagrantでdevstackを構築することにしたのだけど、結構てこずったので記録しておく。

VMの作成

Vagrantfile

他のVMからAPIを使いたいので、private networkを追加している。

[ruby]
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"

config.vm.network "forwarded_port", guest: 5000, host: 5000
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.33.20"

config.vm.provider "virtualbox" do |vb|
vb.name = ‘devstack’
vb.cpus = 2
vb.memory = 8192
end

config.vm.provision "shell", path: "provision.sh"
end
[/ruby]

provision.sh

たぶん、ここで全て構築できるのだけど、手順自体がよくわかっていなかったので、今回は最低限の内容にした。

[text]
sudo apt-get -y update
sudo apt-get -y install git vim
[/text]

devstack構築

stackユーザ作成

NOPASSWDでsudoできるstackユーザを作成しておく。ここはvagrantのprovisionでやってしまってよさそう。

[text]
$ sudo adduser stack
$ stack@vagrant-ubuntu-trusty-64:~$ sudo cat /etc/sudoers.d/50_stack
stack ALL=(ALL) NOPASSWD:ALL
Defaults:stack !requiretty
$ sudo chmod 440 /etc/sudoers.d/50_stack
[/text]

devstack構築

[text]
# stackユーザで操作する
$ sudo su – stack

# libertyを使うことにする
$ git clone https://github.com/openstack-dev/devstack.git
$ cd devstack
$ git checkout -b stable/liberty origin/stable/liberty

# 設定ファイル。サンプルをベースにして、Neutronを使うように修正。
$ cp samples/local.conf .
$ cat local.conf
[[local|localrc]]
SERVICE_TOKEN=azertytoken
ADMIN_PASSWORD=nomoresecrete
DATABASE_PASSWORD=stackdb
RABBIT_PASSWORD=stackqueue
SERVICE_PASSWORD=$ADMIN_PASSWORD

LOGFILE=$DEST/logs/stack.sh.log
LOGDAYS=2

SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
SWIFT_REPLICAS=1
SWIFT_DATA_DIR=$DEST/data

HOST_IP=192.168.33.20 # Keystoneに登録されるendpointはここで指定したものが使われる模様

disable_service n-net
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt,q-l3,neutron
PUBLIC_INTERFACE=eth1

# コマンドを実行して待つ。
$ ./stack.sh
[/text]

30分程すれば使えるようになる。http://localhost:8080/ からHorizonが使える。また、同じprivate networkであればAPIも使える。local.confでHOST_IPを指定していないとprivate networkではなくhost onlyなものが使われるみたい。

[text]
$ curl -v http://192.168.33.20:5000/v3/auth/tokens
* Hostname was NOT found in DNS cache
* Trying 192.168.33.20…
* Connected to 192.168.33.20 (192.168.33.20) port 5000 (#0)
> GET /v3/auth/tokens HTTP/1.1
> User-Agent: curl/7.35.0
> Host: 192.168.33.20:5000
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Date: Sun, 03 Jan 2016 02:22:10 GMT
* Server Apache/2.4.7 (Ubuntu) is not blacklisted
< Server: Apache/2.4.7 (Ubuntu)
< Vary: X-Auth-Token
< x-openstack-request-id: req-96ba3c65-3132-4f73-b910-e5eb674cda53
< WWW-Authenticate: Keystone uri="http://192.168.33.20:5000"
< Content-Length: 162
< Content-Type: application/json
<
* Connection #0 to host 192.168.33.20 left intact
{"error": {"message": "The request you have made requires authentication. (Disable debug mode to suppress these details.)", "code": 401, "title": "Unauthorized"}}%
[/text]