LoginSignup
1
0

More than 1 year has passed since last update.

YAMLファイルでVM構築してみない?(8/19更新)

Last updated at Posted at 2021-08-14

はじめに

普段KVM触るときに`virt-installコマンドを使用してVMを作成しています。しかし、コマンドが長くなりがちで、何個か環境を作成したり、時間を空けて環境を作るとき、すこし手間になっています。なので、ファイルベースにVMを作成できたらいいな、ということで、mkvmというツールを作成しました。まだ基本的な機能しか実装していませんが、今後アップデートしていく予定です。
mkvmのソースコード

更新履歴

  • 8/14 記事を作成、公開
  • 8/19 誤字、脱字の修正, 一括作成機能の追加

mkvmの概要

  • Golangで開発している
  • YAMLファイルでVMを作成できる
    • 複数VMを同時に構築できます(動作未確認)
  • ツール実行は自己責任でお願いします

インストールの仕方

今回は、ubuntu20.04でやっていきます。
まず、Golangをインストールします。

# snap install go --classic
# go version
go version go1.16.5 linux/amd64

次に、mkvmをダウンロードし、実行に必要なパッケージをインストールします。そして、コンパイルします。

# git clone https://github.com/DevelopNaoki/mkvm
# cd mkvm
# go mod download
# go build

これで、mkvmが実行できるようになりました。

# ./mkvm -h
mkvm is manage VM and build VM by mkvm.yml

Usage:
  mkvm [flags]
  mkvm [command]

Available Commands:
  build       build VM by mkvm.yml
  check       Check thin program can execution
  help        Help about any command
  list        Print VM status
  version     Print mkvm version

Flags:
  -h, --help   help for mkvm

Use "mkvm [command] --help" for more information about a command.

使い方

checkコマンドはmkvmが正常に実行できるかチェックを行います。以下のようにすべての項目をパスしていれば実行できます。
# ./mkvm check
Check CPU virtualization...   [Pass]
Check virsh command...        [Pass]
Check virt-install command... [Pass]
listコマンドはvirsh listと同じように動作します。
# ./mkvm list -h
Print VM status

Usage:
  mkvm list [flags]

Flags:
  -h, --help       help for list
      inactive     list inactive domain
      all          list all domain
buildコマンドはmkvm.ymlに記述されているVMを構築します。(mkvm.ymlファイルの検証は未実装です)
# cat mkvm.yml
vms:
  - name: test
    vcpus: 1
    memory: 1024
    disk:
      path: /var/kvm/images/test.img
      format: qcow2
      size: 16
    graphics: vnc,listen=0.0.0.0
    location: /var/kvm/isos/CentOS-7-x86_664-Minimal-2009_Auto.iso,kernel=isolinux/vmlinuz,initrd=isolinux/initrd.img
    extra-args: "inst.ks=cdrom:/ks/anaconda-ks.cfg inst.stage2=cdrom console=tty0 console=ttyS0,115200n8"
    network:
    - bridge=virbr0
# ./mkvm build

# ./mkvm list all
 Id   Name   State
----------------------
 1    test   running

YAMLファイルの構文

基本的には、virt-installの内容に沿っています。

vms:
  - name: test
    count: 2 # test0(test0.img), test1(test1.img)が作成される。
    vcpus: 1
    memory: 1024 # MB
    disk:
      path: ~/test.img
      format: qcow2
      size: 16 # GB
    location: ~/test.iso
    extra-args: "console=tty0 console=ttyS0,115200n8"
    graphics: vns,listen=0.0.0.0
    network:
    - bridge=virbr0

  - name: test2
    vcpus: 1
    memory: 1024 # MB
    disk:
      path: ~/test2.img
      import: true
    cdrom: ~/test2.iso
    graphics: none
    network:
    - bridge=virbr0

おわりに

誤字脱字やバグ、追加したほうがいい機能などがありましたら、こちらの記事やgithubのissuesにコメントいただけたら幸いです。

1
0
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
1
0