stackhpc.libvirt-vm
Libvirt VM
この役割はKVMハイパーバイザー上でVMを設定および作成(または削除)します。
要件
ホストには仮想化技術(VT)が有効になっており、libvirt/KVMが事前に設定されている必要があります。
役割変数
libvirt_vm_default_console_log_dir: VM固有のログファイルパスが指定されない場合にVMコンソールログを保存するためのデフォルトディレクトリ。デフォルトは"/var/log/libvirt-consoles"です。libvirt_vm_default_uuid_deterministic: UUIDをVM名をハッシュ化して計算するかどうか。指定しない場合、VMが定義されるときにlibvirtによってランダムに生成されます。デフォルトはFalseです。libvirt_vm_image_cache_path: ダウンロードしたイメージをキャッシュするディレクトリ。デフォルトは"/tmp/"です。libvirt_volume_default_images_path: インスタンスイメージが保存されるディレクトリ。デフォルトは'/var/lib/libvirt/images'です。libvirt_volume_default_type: インスタンスが使用するバックボリュームのタイプ。デフォルトはvolumeです。オプションにはblock、file、networkおよびvolumeが含まれます。libvirt_volume_default_format: 役割によって作成されるボリュームのフォーマット。デフォルトはqcow2です。オプションにはraw、qcow2、vmdkが含まれます。詳細はman virshを参照してください。libvirt_volume_default_device: ゲストOSでのデバイスの表示方法を制御します。デフォルトはdiskです。オプションにはcdromとdiskがあります。libvirt_vm_engine: 仮想化エンジン。設定されていない場合、役割は使用する最適なエンジンを自動検出しようとします。libvirt_vm_emulator: エミュレータバイナリへのパス。設定されていない場合、役割は正しいエミュレータを自動検出しようとします。libvirt_cpu_mode_default:libvirt_cpu_modeまたはvm.cpu_modeが未定義の場合のデフォルトCPUモード。libvirt_vm_arch: CPUアーキテクチャ、デフォルトはx86_64です。libvirt_vm_uri: libvirt接続URIをオーバーライドします。詳細についてはlibvirt docsを参照してください。libvirt_vm_virsh_default_env: この辞書に含まれる変数は、virshコマンドを実行する際に使用される環境に追加されます。libvirt_vm_clock_offset: 定義されている場合、インスタンスの時計オフセットが指定された値に設定されます。未定義の場合は、同期がlocaltimeに設定されます。libvirt_vm_trust_guest_rx_filters: ゲスト受信フィルタを信頼するかどうか。これはVMインターフェイスのtrustGuestRxFilters属性にマッピングされます。デフォルトはfalseです。libvirt_vms: 作成/削除するVMのリスト。各VMには以下の属性が含まれます。state: VMを作成するためにpresentに設定するか、削除するためにabsentに設定します。デフォルトはpresentです。name: VMに割り当てる名前。uuid: VMに手動で割り当てるUUID。指定された場合、uuid_deterministicまたはlibvirt_vm_default_uuid_deterministicは使用されません。uuid_deterministic:libvirt_vm_default_uuid_deterministicで設定されたデフォルトをオーバーライドします。memory_mb: VMに割り当てるメモリ、メガバイト単位。vcpus: VMに割り当てるVCPUコアの数。machine: 仮想マシンタイプ。libvirt_vm_engineがkvmの場合はデフォルトでNone、それ以外の場合はpc-1.0です。cpu_mode: 仮想マシンのCPUモード。libvirt_vm_engineがkvmの場合はデフォルトでhost-passthrough、それ以外の場合はhost-modelです。CPUモードを設定しない場合はnoneにできます。clock_offset:libvirt_vm_clock_offsetで設定されたデフォルトをオーバーライドします。enable_vnc: trueの場合、VirtManagerおよび類似のツール用にlocalhostでVNCリスニングを有効にします。enable_spice: trueの場合、Virtual Machine Managerおよび類似のツール用にSPICEリスニングを有効にします。enable_guest_virtio: trueの場合、Qemuゲストエージェント用にゲストvirtioデバイスを有効にします。volumes: VMに接続するボリュームのリスト。各ボリュームは以下の辞書で定義されます。type: インスタンスが使用するバックボリュームのタイプ。libvirt_volume_default_typeのすべてのオプションがここで有効です。デフォルトはlibvirt_volume_default_typeです。pool: ボリュームを割り当てるストレージプールの名前またはUUID。typeがvolumeの場合は必要です。name: 作成されるボリュームに関連付ける名前;fileタイプのボリュームには、拡張子を含めることができます。file_path:fileタイプのボリュームのイメージを配置する場所;デフォルトはlibvirt_volume_default_images_pathです。device: ゲストOSでのデバイスの表示方法。すべてのオプションがlibvirt_volume_default_deviceで有効です。デフォルトはlibvirt_volume_default_typeです。capacity: ボリューム容量で、ネットワークタイプの場合はk、M、G、T、P、Eなどの接尾辞が、ディスクタイプの場合はMB、GB、TBなどが必要です。(ディスクまたはネットワークタイプの場合に必要)auth: 認証が必要な場合の詳細。認証が必要な場合、username、type、およびuuidまたはusageが必要です。uuidとusageは両方を指定しないでください。source:networkタイプの場合、リモートボリュームがどこから来るか。protocol、name、およびhosts_listが必要です。portはオプションです。format: ボリュームのフォーマット。すべてのオプションがlibvirt_volume_default_formatで有効です。デフォルトはlibvirt_volume_default_formatになります。image: (オプション)ボリュームが初期化されるイメージへのURL(完全コピー)。checksum: (オプション)ダウンロードが不要な場合のためにimageのチェックサム。backing_image: (オプション)すでに同じプールにあると想定されるバックボリュームの名前(コピー・オン・ライト)。imageとbacking_imageは相互排他的オプションです。target: (オプション)ボリュームのタイプと順序に手動で影響を与えます。dev: (オプション)タイプがblockの場合のブロックデバイスパス。remote_src: (オプション)タイプがfileまたはblockの場合、imageがリモートファイルを指しているか(true)ローカルファイルを指しているか(false)を指定します。デフォルトはtrueです。
usb_devices: ホストからVMに提示するUSBデバイスのリスト。各USBデバイスは以下の辞書で定義されます:
vendor: USBデバイスのベンダーID。product: USBデバイスのプロダクトID。
注意 - VMがプロビジョニングされてUSBデバイスが接続されていない場合、Libvirtはエラーになります。
ホスト上でsudo / rootとして実行し、USBデバイスが接続されている状態でベンダーIDとプロダクトIDを取得するには
lsusb -vを実行します。以下は、ベンダーIDが0x0781、プロダクトIDが0x5567のSandisk USBメモリスティックが接続されている例です。lsusb -v | grep -A4 -i sandisk idVendor 0x0781 SanDisk Corp. idProduct 0x5567 Cruzer Blade bcdDevice 1.00 iManufacturer 1 iProduct 2interfaces: VMに接続するネットワークインターフェイスのリスト。 各ネットワークインターフェイスは以下の辞書で定義されます:type: インターフェイスのタイプ。可能な値:network: 名前付きLibvirt仮想ネットワークにインターフェイスを接続します。これはデフォルト値です。direct: ホストの物理インターフェイスの1つにインターフェイスを直接接続します。macvtapドライバを使用します。
network: インターフェイスを接続するネットワークの名前。インターフェイスのtypeがnetworkのときにのみ指定する必要があります。mac: 仮想インスタンスの「ハードウェア」アドレス。指定されていない場合は作成されます。source: このVMインターフェイスが接続されるホストインターフェイスを定義する辞書。インターフェイスのtypeがdirectの場合にのみ指定する必要があります。以下の属性が含まれます:dev: このVMインターフェイスが接続されるホストインターフェイスの名前。mode: オプションにはvepa、bridge、private、およびpassthroughが含まれます。詳細はman virshを参照してください。デフォルトはvepaです。
trust_guest_rx_filters: ゲスト受信フィルタを信頼するかどうか。これはVMインターフェイスのtrustGuestRxFilters属性にマッピングされます。デフォルトはlibvirt_vm_trust_guest_rx_filtersです。model: インターフェイスモデルの名前。例えば、e1000やne2k_pciなど、未定義の場合はデフォルトでvirtioです。alias: オプションのインターフェイスエイリアス。これは特定のネットワーク設定を永続的なネットワークデバイスに名前で結びつけるために使用できます。ユーザー定義のエイリアスには常にua-がプレフィックスとして付与されます(ua-なしのエイリアスはlibvirtによって無視されます)。未定義の場合はlibvirt管理のvnetXがデフォルトです。
console_log_enabled:trueの場合、console_log_pathで指定されたパスのファイルにコンソール出力をログします。PTYではなく。falseの場合、シリアルポート0のPTYに直接端末出力を設定します。デフォルトはfalseです。console_log_path: コンソールログファイルへのパス。デフォルトは{{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.logです。start: 定義後にVMをすぐに起動するかどうか。デフォルトはtrueです。autostart: ホスト起動時にVMを起動するかどうか。デフォルトはtrueです。boot_firmware:biosまたはefiのいずれか。デフォルトはbiosです。xml_file: オプションで修正されたXMLテンプレートを提供します。デフォルトのvm.xml.j2テンプレートからカスタマイズして、役割が使用する想定のjinja式を含めるようにします。
注意:以下の変数は非推奨です:libvirt_vm_state、libvirt_vm_name、libvirt_vm_memory_mb、libvirt_vm_vcpus、libvirt_vm_engine、libvirt_vm_machine、libvirt_vm_cpu_mode、libvirt_vm_volumes、libvirt_vm_interfacesおよびlibvirt_vm_console_log_path。libvirt_vms変数が未設定の場合、そのデフォルト値はこれらの非推奨変数を使用したVM仕様を持つシングルトンリストになります。
依存関係
qcow2フォーマットのドライブを使用する場合は、qemu-img(qemu-utilsパッケージ内)が必要です。
例としてのPlaybook
---
- name: VMsを作成する
hosts: hypervisor
roles:
- role: stackhpc.libvirt-vm
libvirt_vms:
- state: present
name: 'vm1'
memory_mb: 512
vcpus: 2
volumes:
- name: 'data1'
device: 'disk'
format: 'qcow2'
capacity: '400GB'
pool: 'my-pool'
- name: 'debian-10.2.0-amd64-netinst.iso'
type: 'file'
device: 'cdrom'
format: 'raw'
target: 'hda' # ideバス上の最初のデバイス
- name: 'networkfs'
type: 'network'
format: 'raw'
capacity: '50G'
auth:
username: 'admin'
type: 'ceph'
usage: 'rbd-pool'
source:
protocol: 'rbd'
name: 'rbd/volume'
hosts_list:
- 'mon1.example.org'
- 'mon2.example.org'
- 'mon3.example.org'
- type: 'block'
format: 'raw'
dev: '/dev/sda'
interfaces:
- network: 'br-datacentre'
usb_devices:
- vendor: '0x0781'
product: '0x5567'
- state: present
name: 'vm2'
memory_mb: 1024
vcpus: 1
volumes:
- name: 'data2'
device: 'disk'
format: 'qcow2'
capacity: '200GB'
pool: 'my-pool'
- name: 'filestore'
type: 'file'
file_path: '/srv/cloud/images'
capacity: '900GB'
interfaces:
- type: 'direct'
source:
dev: 'eth123'
mode: 'private'
- type: 'bridge'
source:
dev: 'br-datacentre'
著者情報
- マーク・ゴダード (mark@stackhpc.com)
ansible-galaxy install stackhpc.libvirt-vm