読者です 読者をやめる 読者になる 読者になる

めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Automation script for virt-install and kickstart

変更履歴
2012/09/16 設定ファイルの書き方をざっくりまとめました。

何の話かというと

アプリケーション環境構築の自動化をまじめに考えてみる(1)」と「アプリケーション環境構築の自動化をまじめに考えてみる(2)」で作った自動VMインストールスクリプト(virt-construct)を使い出したら、本気で便利でいろいろオプションを追加しだしたので、githubにあげてメンテナンスすることにしました。

興味のある方は、こちらのgithubリポジトリを参照ください。また、本記事の説明は、タグ「article03」のバージョンに基づいています。

前提条件

次の条件下での利用を想定しています。

・RHEL6.xのKVMホストで、デフォルトの仮想ネットワーク「default」が構成されている。
・同ホストでhttpdが動いていて、/var/www/html/ks/以下(ks.cfgの一時的な置き場)が「default」に向けて公開されている。
・EPELからpython-argpaseを追加。

使い方

オプションはこんな感じ

$ sudo ./virt-construct.py -h
usage: virt-construct.py [-h] [-c CONF] [-d KSDIR] [-b KSBASEURL] [-s] [-n]

Build KVM virtual machine

optional arguments:
  -h, --help            show this help message and exit
  -c CONF, --conf CONF  Config file
  -d KSDIR, --ksDir KSDIR
                        directory to place ks.cfg
  -b KSBASEURL, --ksBaseurl KSBASEURL
                        baseurl for ks.cfg
  -s, --startvm         start vm after installed
  -n, --dryrun          dryrun

それぞれの意味は、先のBlog記事を参照してください。

-cオプションで指定する設定ファイルは、次の3つのセクションを持ちます。

[variables]セクション

設定ファイル内で利用できる一般的な変数を定義します。このセクションで定義した「name」という変数の値で、他のセクションの「${name}」の部分が置換されます。

[virt-install]セクション

virt-installコマンドに与えるオプションです。kickstart用の設定と--noautoconsole(インストール中にコンソールを表示しない)、--noreboot(インストール後はVMを停止する)は自動的に付加されるので、ここには記載しません。

[kickstart]セクション

キックスタートファイル(ks.cfg)の中身を記載します。このセクション内では、任意の文字「x」に対して「\x」→「x」の置換が行われます。これは、次のような表記をエスケープする際に使用します。

\[baseos] → [baseos]に置換

⇒ 設定ファイル固有のセクション開始記号と誤って見なされないようにする

$\{hoge} → ${hoge}に置換

⇒ 設定ファイル固有の変数置換ではなく、bashの変数表記として解釈されるようにする

また、設定ファイル内で環境変数の参照が可能です。[variables]セクションで、最後がアンダースコアで終わる変数名をこんな感じで定義したとします。

gluster00.conf

[variables]
vmname_=gluster0_n_
hostname_=gluster0_n_
diskpath1_=/var/lib/libvirt/images/gluster0_n_-1.img
diskpath2_=/var/lib/libvirt/images/gluster0_n_-2.img
ip_=192.168.122.1_n_

この例の場合、変数「vmname」(「vmname_」ではないので注意)に対して、「_n_」の部分が環境変数「n」に置き換えられた値が代入されます。

こうすると、次のようにスクリプト実行時に環境変数経由で値を突っ込むことができます。同じ構成のVMを連番で複数作る場合などに便利になります。([variables]セクション以外に、直接に環境変数を入れこむことはできません。)

sudo n='1' ./virt-construct.py -c gluster00.conf

ちなみに、githubに上がっているgluster00.confとdeploy_gluster.shを利用すると、ここに書かれたGlusterFS環境のVMが自動作成できます。(「gluster peer probe」する直前の状態まで自動構成されます。)便利!

※gluster00.confに入っているurlは、Private環境のリポジトリです。