DevStackを試してみる

openstackを触ってみたかったのでdevstackを触ってみたときのメモです。
（とりあえずインストールして少し触ってみただけ）

# DevStackとは

[公式ドキュメント](http://docs.openstack.org/developer/devstack/)

* openstackを簡単にデプロイするためのツール  
    * なのでopenstackのディストリビューションではない
    * あくまで開発用で本番で使用しないほうがよい、らしい

* 以前はdevstack一択だったらしいが、今はいろんなツールが存在している
    * OpenStackの公式デプロイツールであり、OpenStackのCIでも使われている
    * こちらの[入門wiki](https://github.com/rafiror/openstack/wiki/Devstack%E5%85%A5%E9%96%80)も参考になった

* ディストリビューションについて
    * RedHat系なら[RDO](https://www.rdoproject.org/)がある  
    * RDOはOpenStackのディストリビューションで、構築処理は[PackStack](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux_OpenStack_Platform/4/html/Getting_Started_Guide/chap-Running_PackStack.html)というツールで実行する感じ？  
        * 参考：[Vagrant と RDO で OpenStack をサクッと試す](http://momijiame.tumblr.com/post/80582413671/vagrant-%E3%81%A8-rdo-%E3%81%A7-openstack-%E3%82%92%E3%82%B5%E3%82%AF%E3%83%83%E3%81%A8%E8%A9%A6%E3%81%99)
    * 他にもRedHatの有償版やOracle,VMwareのディストリビューションもある

# vagrant_devstack

https://github.com/bcwaldon/vagrant_devstack

* vagrantでUbuntuを起動して、chefでdevstackを実行するパッケージ
* etc以下のsampleファイルをリネームし、独自の値で既存設定を上書きすることができる


### 実行してみる

* `vagrant up`で起動した後しばらく放置するだけ。。
    * エラーでコケた。。

```
==> default: OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/pbr'
==> default: /usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
==> default:   InsecurePlatformWarning
==> default: + exit_trap
==> default: + local r=2
==> default: ++ jobs -p
==> default: + jobs=
==> default: + [[ -n '' ]]
==> default: + kill_spinner
==> default: + '[' '!' -z '' ']'
==> default: + [[ 2 -ne 0 ]]
==> default: + echo 'Error on exit'
==> default: + [[ -z /opt/stack/logs ]]
==> default: + /home/vagrant/devstack/tools/worlddump.py -d /opt/stack/logs
==> default: + exit 2
==> default: ---- End output of su -c 'set -e; cd /home/vagrant/devstack; RECLONE=yes bash stack.sh > devstack.log' vagrant ----
==> default: Ran su -c 'set -e; cd /home/vagrant/devstack; RECLONE=yes bash stack.sh > devstack.log' vagrant returned 2
==> default: [2016-01-12T09:22:09+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.
```

pythonの環境が合っていない？？
調査のためVM内に入ってみたがよく分からない。。

# 手動devstack

今度はdevstackの[クイックスタート](http://docs.openstack.org/developer/devstack/#quick-start)通りにやってみる。

### 1. vagrant で Ubuntu 作成

```
$ vagrant init
$ vi Vagrantfile
```

```shell-session:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "trusty"
  config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  config.vm.network :private_network, ip: "192.168.33.10"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "4096", "--cpus", "2"]
  end
end
```

```
$ vagrant up
$ vagrant ssh
```

### 2. devstackの準備

```
$ sudo apt-get install git
$ git clone https://git.openstack.org/openstack-dev/devstack
```

### 3. 設定ファイルを作成

```
$ vi devstack/local.conf
```

* [Minimal Configuration](http://docs.openstack.org/developer/devstack/configuration.html#minimal-configuration)をそのまま使用した

```
[[local|localrc]]
ADMIN_PASSWORD=secrete
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
#FIXED_RANGE=172.31.1.0/24
#FLOATING_RANGE=192.168.20.0/25
#HOST_IP=10.3.4.5
```

### 4. ドキュメント通りに stack ユーザを作る

```
$ devstack/tools/create-stack-user.sh
$ sudo chmod -R 777 devstack
$ sudo su - stack
```

### 5. インストール実行

```
$ cd /home/vagrant/devstack
$ ./stack.sh
```

これでとりあえずインストールは完了した。
コンソールに出力されるIDとパスワードで管理画面(horizon)にログインする。

* 起動スクリプト
  * Ubuntu内でdevstackを再実行する場合は、`~/devstack/stack.sh`を実行
  * openstackの再起動を行う場合は、`~/devstack/rejoin-stack.sh`を実行  
(vagrantに例えると、stack.shはvagrantの再実行で、rejoin-stack.shはUbuntuの再起動、というイメージだと思われる)



# OpenStackの操作

### GUI 
* ブラウザで`192.168.33.10`にアクセスするとOpenStackのコンソール画面が表示される
* 手順通りに実施すると、
    * ID = "admin" or "demo"
    * Password = "nomoresecrete"  
  でログインできるはず。

### CUI
* クライアントツールを実行する場合、事前に環境変数の設定が必要
* 下記コマンドで必要な環境変数をまとめて設定できる（"username"と"tenantname"は省略可能）

```
$ source openrc [username] [tenantname]
```

* nova とか neutron とか、コンポーネントごとに色んなコマンドがある

### RestAPI

* 外部システムから処理を呼び出す場合に使用する
* 実際には対応したSDKを使って呼び出すのが一般的な模様

# エラーになる。。。

* フレーバー(インスタンスサイズ)で"m1.small"以上を選択してインスタンスを起動するとエラーになる。。
    * おそらくホストのメモリが足りなくてエラーになっていたと思われる
    * RDOではホストのメモリを上げたらインスタンス起動できた  
      ⇒ 【[RDOを試してみる](http://qiita.com/teratsyk/items/554044ae417d8c43084a)】

---

参考サイト 

* [公式](http://docs.openstack.org/developer/devstack/)
* [Devstack入門](https://github.com/rafiror/openstack/wiki/Devstack%E5%85%A5%E9%96%80)
* [「オープンソース」を使ってみよう (第23回 DevStackでラクラク導入！ OpenStackを使ってみよう編)](http://www.ospn.jp/press/20120828no27-useit-oss.html)
* [OpenStack初心者でもVagrantを使ってOpenStackを体験する方法](http://qiita.com/takuan_osho/items/7f571fb35d282251e5e7)