Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.3.5. 对大量 v2v 操作进行脚本自动化

如果需要大量导入虚拟机,在同一个主机上运行 v2v 自动化脚本就会有很大的优势。到远程 Red Hat Enterprise Virtualization Manager 的操作可以使用 REST API 进行,这使在一个 Linux 主机上运行 v2v 自动化脚本成为可能。图 4.5 “对大量 v2v 操作进行脚本自动化” 展示了自动化脚本所进行的操作。
对大量 v2v 操作进行脚本自动化

图 4.5. 对大量 v2v 操作进行脚本自动化

图 4.5 “对大量 v2v 操作进行脚本自动化” 所示,对大量 v2v 操作进行脚本自动化包括以下步骤:
  1. 从源虚拟机监控系统上获得虚拟机的映像。
  2. 对虚拟机映像进行打包,并复制到导出存储域。
  3. 使用一个到 Red Hat Enterprise Virtualization Manager 的远程调用来通知它导入虚拟机。
  4. Manager 从导出存储域中导入虚拟机。
配置并运行大量 v2v 操作的自动化脚本:

过程 4.9. 配置并运行大量 v2v 操作的自动化脚本

  1. 确认 Red Hat Enterprise Virtualization Manager 启用了 REST API,并可以被运行 v2v 脚本的 Linux 访问。如需了解更多关于 REST API 的信息,请参阅 Red Hat Enterprise Virtualization Developer Guide
  2. 在 Linux 主机上,创建包括以下内容的 v2v.sh 文件。请确认您根据您的具体环境对脚本中的相应内容进行了修改。

    例 4.5. 单独主机的 v2v 脚本

    #!/bin/sh
    # Declare all VMs to import
    XENDOMAINS=("rhelxen" "rhel5")
    KVMDOMAINS=("rhelkvm")
    VMWAREVMS=("rhel54vmware")
    
    # Iterate through each Xen domain, performing the conversion
    for domain in ${XENDOMAINS[@]}
    do
            virt-v2v -ic xen:///localhost -o rhev -os storage.example.com:/exportdomain --network rhevm $domain
    done
    
    # Iterate through each KVM domain, performing the conversion
    for domain in ${KVMDOMAINS[@]}
    do
            virt-v2v -o rhev -os storage.example.com:/exportdomain --network rhevm $domain
    done
    
    # Iterate through each VMware VM, performing the conversion
    for vm in ${VMWAREVMS[@]}
    do
            virt-v2v -ic esx://esx.example.com/?no_verify=1 -o rhev -os storage.example.com:/exportdomain --network rhevm $vm
    done
    
    
    # Call the import VM procedure remotely on the RHEV Manager
    
    export BASE_URL='https://[rhevm-host]'
    export HTTP_USER='user@internal'
    export HTTP_PASSWORD='password'
    
    curl -o rhevm.cer http://[rhevm-host]/ca.crt
    
    # Get the export storage domains
    
    curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/storagedomains?search=nfs_export -o exportdomain
    EXPORT_DOMAIN=`xpath exportdomain '/storage_domains/storage_domain/@id' | sed -e 's/ id=//' | sed -e 's/"//g'`
    
    # Get the datacenter
    
    curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/datacenters?search=NFS -o dc
    DC=`xpath dc '/data_centers/data_center/@id' | sed -e 's/ id=//' | sed -e 's/"//g'`
    
    # Get the cluster
    
    curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/clusters?search=NFS -o cluster
    CLUSTER_ELEMENT=`xpath cluster '/clusters/cluster/@id' | sed -e 's/ id=//' | sed -e 's/"//g'`
    
    # List contents of export storage domain
    
    curl -X GET -H "Accept: application/xml" -u "${HTTP_USER}:${HTTP_PASSWORD}" --cacert rhevm.cer ${BASE_URL}/api/storagedomains/${EXPORT_DOMAIN}/vms -o vms
    
    # For each vm, export
    VMS=`xpath vms '/vms/vm/actions/link[@rel="import"]/@href' | sed -e 's/ href="//g' | sed -e 's/"/ /g'`
    
    for vms in $VMS
    do 
            curl -v -u "${HTTP_USER}:${HTTP_PASSWORD}" -H "Content-type: application/xml" -d '<action><cluster><name>cluster_name</name></cluster><storage_domain><name>data_domain</name></storage_domain><overwrite>true</overwrite><discard_snapshots>true</discard_snapshots></action>' --cacert rhevm.cer ${BASE_URL}$vms
    done
    
    

    注意

    使用 POST 方法来通过 REST API 导出虚拟机。如需了解更多关于 REST API 的信息,请参阅 Red Hat Enterprise Virtualization Developer Guide
  3. 运行 v2v.sh 脚本。这可能需要几个小时才能完成转换并导入大量虚拟机的操作。