SRA Advent Calendarの2日目です。
ネットワークシステムサービス第1事業部の ふじまき です。
Test KitchenでoVirtを使う場合、VagrantとVagrantのoVirt用のモジュールを追加して、kitchenドライバーはVagrantを使えばよいのですが、LinuxサーバにVagrant入れたくない(偏見)のでkitchen-ovirtを作ってみました。
なお、今のところWindowsには対応してません。
kitchen-ovirtの使い方
ここの詳細日本語版
インストール
ソースをビルドするかgemをダウンロードして、インストールします。
$ gem install /path/to/kitchen-ovirt-0.0.1.gem
CentOS7系の場合、Software CollectionsでRuby2.5以上をインストール、有効にしておく必要があります。(Ruby2.4でもovirt-engine-sdkの4.3.1を事前に入れておけばOK)
設定
パラメータ | 必須? | デフォルト値 | 説明 | 例 |
---|---|---|---|---|
engine_url | yes | なし | oVirtのAPIのURL | https://ovirt.example.com/ovirt-engine/api |
ovirt_username | no | admin@internal | APIをリクエストする時のユーザー名 | kitchen@internal |
ovirt_password | yes | なし | ovirt_usernameで指定したユーザーのパスワード | kitchen-password |
vm_net_interface | yes | なし | 仮想マシン内でIPをアサインするインターフェイス名 | eth0 |
vm_net_address | yes | なし | 仮想マシンに設定するIPアドレス | 192.168.1.2 |
vm_net_netmask | yes | なし | 仮想マシンに設定するネットマスク。IPv6の場合はプリフィックス | 255.255.255.0 , 64 |
datacenter | no | Default | 使用するoVirtのデータセンター名 | TokyoDataCenter |
cluster | no | Default | 使用するoVirtのクラスター名 | Cluster123 |
template | no | .kitchen.ymlのplatform名 | 使用するテンプレート名。デフォルト以外を指定したい場合のみ | centos-7-v1 |
vm_name | no | tk-"suite名"-"platform名"-"ランダム文字" | oVirt上の仮想マシン名 | kitchen-test-123 |
vm_username | no | root | 仮想マシンにログインする管理者アカウント | |
vm_password | no | root123 | 仮想マシンの管理者アカウントに設定するパスワード | |
vm_description | no | Test Kitchen VM | oVirt上の仮想マシンにつける説明 | |
vm_net_ipver | no | IPv4 | 仮想マシンで使用するIPプロトコルバージョン。IPv4 or IPv6を指定 | |
dns_servers | no | なし | 仮想マシンで使用するDNSサーバ。複数の場合はカンマ区切り | "192.168.1.1,192.168.2.1" |
wait_after_up | no | 10 | 仮想マシン起動後のウェイト(秒) |
wait_after_upはoVirtが仮想マシン起動を認識してもcloud-init諸々が完了してない事があるので念のためのウェイト。
テンプレート仮想マシン作成
基本は以下の流れ
- oVirt上でゲストを作成
- 作成したゲストにcloud-initをインストール
- その他必要な設定諸々をする(後述)
- シャットダウンしてテンプレート作成メニューで「テンプレートをシーリングする」のチェックを付けてテンプレート作成
私の場合chef(cinc)を使っており、毎回インストールするのは無駄なのでテンプレート仮想マシンにインストールしています。
CentOS 7,8
必須のカスタマイズは特になし。なおCentOS6(2020年11月30日でEoL)標準のcloud-initはoVirt 4.4では動きませんでした。
Ubuntu Server 18.04 / 20.04共通
Ubuntu 16.04は未確認。
- rootユーザーにパスワードを設定。
- openssh-serverを入れる。
- rootユーザーのsshログインを許可&ログイン確認しておく。
手元の環境では仮想マシンのNICに固定IPをアサインし、その設定消してからテンプレートにすると何故かネットワークが自動起動しない(cloud-initで設定は更新されていて、netplan applyするとupする。謎)のでDHCP有効なままテンプレート化しています。
Ubuntu Server 20.04
上記に加えて
- fstabのデバイスがuuid指定になっている場合、通常のデバイス名に直す
- 以下のcloud-init設定削除
$ sudo rm /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
$ sudo rm /etc/cloud/cloud.cfg.d/99-installer.cfg
- oVirtが使うDatasourceのConfigDriveを有効にする設定ファイルを作成
$ echo 'datasource_list: [ ConfigDrive ]' | sudo tee /etc/cloud/cloud.cfg.d/99-datasource.cfg
kitchen driverの書き方
一応、プログラミングネタとしてちょっとだけ。
以前はkitchen driver createでひな形を作れたらしいですが、機能が削除されているので、kitchen-ovirtの作成ではgemでひな形作って構成は既存ドライバを真似ています。
作り方のドキュメントが無いのですが、大体以下のような流れで作る事が出来ます。
- Kitchen::Driver::Baseを継承して新規ドライバのクラスを作成
- createメソッドの中でSDKを使って新規仮想マシンを作成し、引数で受け取ったハッシュ("state")の:server_nameに仮想マシン名、:hostnameにIPアドレス、:usernameにsshログインユーザー名、:passwordにsshログインパスワードを格納
- destroyメソッドの中で作成した仮想マシンを破棄、stateをクリア
- .kitchen.ymlに書くドライバのコンフィグはrequired_config/default_configで宣言
Tips: chef-workstationでprovisionerにcincを使う
Chefの公式パッケージは2019年4月頃に有償化され、コミュニティビルドのパッケージを配布するCINCが立ち上がりました。
が、cinc-workstationパッケージは現在pre-releaseとなっており有償化前のchef-workstationを使っている環境も多いと思います。(私含む)
chef-workstation環境の.kitchen.ymlのprovisionerで
install_strategy: once
product_name: cinc
と書いてもチェックで弾かれて動きません。
このチェックはchef-workstationパッケージに含まれているmixlib-installというgemの中で静的に定義されているので、以下4行追加すると動くようになります。
product "cinc" do
product_name "Cinc Client"
package_name "cinc"
end
当たり前ですが、cinc-workstationでは最初から入っているので修正不要です。