LoginSignup
6
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-24

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も使えます。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6