Edited at

さくらのクラウドでつかえるTest-Kitchenのドライバができた

More than 3 years have passed since last update.

Kitchen::Driver::Sakuracloudがひっそりと公開されている。

Test-Kitchen のバージョン1.4以降ではVMの調達に関連する処理を、独立したモジュールとして扱えるようになりました。

先日、所用で作業用のDebianサーバがそこそこの性能で1つ必要になったので、さくらのクラウドに一瞬だけ上げようと思いました。

コンパネ開くのが面倒くさかったのでTest-Kitchenのドライバを書くことにしました。


Test-KitchenのDriver(VMの作成・削除を担当)

v1.4以降のDriverは、(調達したサーバへの接続方法がSSH or WinRMに限れば)


  • 作る時: 作って、ID(クラウドベンダ側で発行)とSSH or WinRMで接続するためのアドレスをstateに入れる

  • 消す時: IDを控えてあるので、それに従って削除する

今回作成したぶんで、該当するのはこの辺。


lib/kitchen/driver/sakuracloud.rb

...

def create(state)
server = create_server
state[:id] = server.id
state[:hostname] = server.interfaces.first["IPAddress"]
end

def destroy(state)
destroy_server(state[:id]) if state[:id]
end

...


Driverの役割ってこれだけです。fogにしてあるから、こういう時に楽ちん。


使う時

SAKURACLOUD_API_TOKENSAKURACLOUD_API_TOKEN_SECRETは環境変数にあれば勝手に使うので、このようにYAMLに書いてしまう。


.kitchen.yml

---

driver:
name: sakuracloud
sshkey_id: <%= ENV['SAKURA_SSHKEY_ID'] %>
api_zone: tk1a

transport:
username: root
ssh_key: <%= ENV['SAKURA_SSHKEY_PATH'] %>

provisioner:
name: shell

verifier:
name: shell

platforms:
- name: debian8
driver:
sourcearchive: 112700890487
serverplan: 4004
diskplan: 4
size_mb: 20480
- name: ubuntu14
driver:
serverplan: 4004
diskplan: 4
size_mb: 20480
transport:
username: ubuntu

suites:
- name: default
run_list:
attributes:


provisioner=>shell、はカレントにあるbootstrap.shを転送して叩く。

verifier =>shell、は省略するとローカルの/bin/trueで終わる。

とりあえずログイン状態で対話的に試したい事があったので、これでOK。

listをみれば、DriverにSakuracloudとなっているのがわかる。

$ kitchen list

Instance Driver Provisioner Verifier Transport Last Action
default-debian8 Sakuracloud Shell Shell Ssh <Not Created>
default-ubuntu14 Sakuracloud Shell Shell Ssh <Not Created>


VMを起動

そうそう、このときはglibcのリビルドをオプション変えつつ試したかったのです。なのでとりあえず準備だけしてくれればよいので、convergeで実行するスクリプトを置きます。


bootstrap.sh

sudo mkdir -p /usr/local/deb/glibc

cd /usr/local/deb/glibc

sudo apt-get update && apt-get install -y \
cmake dpkg-dev bison libbison-dev ruby \
&& apt-get build-dep -y glibc --fix-missing \
&& apt-get source -y glibc


$ kitchen converge debian

-----> Starting Kitchen (v1.4.2)
-----> Creating <default-debian8>...
[fog][WARNING] Create Server
[fog][WARNING] Create Volume
[fog][WARNING] Waiting disk until available
.[fog][WARNING] Modifing disk
Finished creating <default-debian8> (1m31.15s).
-----> Converging <default-debian8>...
Preparing files for transfer
Preparing script
[SSH] connection failed, retrying in 1 seconds (#<Timeout::Error: execution expired>)
Transferring files to <default-debian8>
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
Get:2 http://security.debian.org jessie/updates/main Sources [109 kB]
Ign http://dennou-h.gfd-dennou.org jessie InRelease

....

-----> Kitchen is finished. (2m58.76s)

ではログインして色々と試す。

$ kitchen login debian

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

...

root@localhost:~#


VMを廃棄

じゃあ消そう。

$ kitchen destroy debian

-----> Starting Kitchen (v1.4.2)
-----> Destroying <default-debian8>...
Finished destroying <default-debian8> (0m19.32s).
-----> Kitchen is finished. (0m19.40s)

はい消えたー。

普通に各種Provisionerも使えます。