ShinobiLayer: python APIを使ったサンプルポータル(slick)を試してみる

#はじめに

* SoftLayerのAPIを使ったアプリケーションの実装例を知りたい。
* SoftLayerのCustomer Portalではなく、自分達独自のサービスをインテグレーションさせたり、よりLook and Feelが優れたページを使ってSoftLayerを使いたい。

という方はたくさんいるのではないかと思います。今回は、https://github.com/softlayer/slick で公開されているPythonベースのslickというアプリケーションを、**CentOS 7.x**で動かしてみます。

注1. github上の導入手順ではUbuntu 14.04-64を使用するように指示されていますが、今回はCentOS 7.xを利用します。
注2. CentOS 6.xはPythonが2.6です。2.7にupgradeしないと警告がいたる所で出るので、CentOS 7.xの方が導入し易いです。（CentOS 6.xのPythonのバージョンを上げたらよいのですがだけなのですが、それを書くだけでスペース使いそうなので。。。）

#導入パッケージの紹介

* Flask: Pythonベースの軽量なウェブアプリケーションフレームワーク。
* WTForms: ユーザー入力用フォームを定義したり送信されたフォームの処理を簡単する為のパッケージ。
* sqlite: 軽量データベース。[「今すぐSQLite入門。知っておくべきたった5つのこと」](http://d.hatena.ne.jp/grgrjnjn/20110401/1301669692)とかの説明が分かりやすい。github上の導入ガイドによるとsqlite3を入れるように書かれてありますが、CentOS 7.xには最初から入っています。パッケージ名もsqliteで良いです。
* libpq-dev: CentOSには存在しないようなので、postgresql-develで代用するらしいです。http://www.faqoverflow.com/serverfault/316703.html
* gcc: 導入時のコンパイルにgccが使われているので入れておきます。

#導入

```
#環境確認
[root@sltest01 ~]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
[root@sltest01 ~]# python -V
Python 2.7.5

#yumによるパッケージの導入
[root@sltest01 ~]# yum install postgresql-devel sqlite git gcc python-devel python-setuptools

#pipによるパッケージの導入
[root@sltest01 ~]# easy_install pip
[root@sltest01 ~]# pip install WTForms wtforms-html5 WTForms-Components
[root@sltest01 ~]# pip install flask
[root@sltest01 ~]# pip install six --upgrade

#slickの導入。なお、python setup.py install実施時に、もしSoftLayerのPython-Clientが未導入であれば導入してくれる。既に導入済みの場合は、github上の最新版ではなく、release版を利用すること。
[root@sltest01 ~]# cd /usr/local/
[root@sltest01 local]# git clone https://github.com/softlayer/slick.git
[root@sltest01 local]# cd slick
[root@sltest01 slick]# python setup.py install

#Databaseのセットアップ
[root@sltest01 slick]# alembic upgrade head

#Configの修正
[root@sltest01 slick]# cp -p config.py.sample config.py
[root@sltest01 slick]# vi config.py
（SECRET_KEYとOTP_SECRETに適当な値を入れる）
[root@sltest01 slick]# sdiff -s config.py config.py.sample
SECRET_KEY = 'zaq12wsx' # Set this to something random        | SECRET_KEY = '' # Set this to something random
OTP_SECRET = 'xsw23edc' # Set this to something else random   | OTP_SECRET = '' # Set this to something else random

#環境変数の設定
[root@sltest01 slick]# vi ~/.bashrc
（export SLICK_CONFIG_FILE=/usr/local/slick/config.py　を追記）
[root@sltest01 slick]# tail -1 ~/.bashrc
export SLICK_CONFIG_FILE=/usr/local/slick/config.py
[root@sltest01 slick]# . ~/.bashrc
[root@sltest01 slick]# env |grep SLICK_CONFIG_FILE
SLICK_CONFIG_FILE=/usr/local/slick/config.py

```

#サービス起動

```
[root@sltest01 slick]# python run.py
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
（停止したいときは、Ctrl +C）
```

ポート確認

```
[root@sltest01 ~]# ss -antup | grep -e State -e ":5000 "
Netid  State      Recv-Q Send-Q     Local Address:Port       Peer Address:Port
tcp    LISTEN     0      128                    *:5000                  *:*      users:(("python",10315,3))

```

#実際にブラウザでアクセスしてみる
http://\<IP Address\>:5000にアクセスしてみて下さい。

* ユーザーIDはCustomer Portalのものと同じです。<br> ![slic01.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/b9dbd897-01e0-2d83-3f61-fada68a456eb.jpeg)
* トップ画面。色々なDashboardが提供されています。<br> ![slic02.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/a4176fef-56d1-d76b-81a6-92e1b3b4953e.jpeg) 
* サーバーの一覧 <br> ![slic03.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/10d50a12-9053-60ca-3f07-29bb23c1e8b8.jpeg)
* Subnetの一覧 <br> ![slic04.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/af78c42c-d5b9-4b76-4cb7-45ac6d7b75db.jpeg)
* サーバー注文画面<br> ![slic05.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/ff839368-c2f1-0f3c-1f29-9bc74f3ae96c.jpeg)

#終わりに
いかがでしたでしょうか？SoftLayerのAPIを使えば、こんなこともできるんですね。