批量创建VMWare虚拟机
在桌面操作系统中,可以通过 VMware PowerCLI调用接口,批量创建VMWare虚拟机,给基础服务器环境部署带来便利。
下面以Windows系统为例,实现一个批量创建虚拟机的PowerShell脚本
一、安装PowerCli模块
首先需要右键以管理员身份启动Windows PowerShell
启动powershell后,安装PowerCli模块
PS C:\Windows\system32> Install-Module -Name VMware.PowerCLI
二、连接vCenter Server或VCSA
连接vCenter管理服务器,或者直接连接ESXi
Connect-VIServer <vcenter domain or ip address> -User Administrator@vsphere.local
将弹出Specific Credential对话框,输入管理员用户名和密码
三、创建预配置文件
创建一个配置文件,可以指定一些选项,如虚拟机名称、ip地址、资源池、存储位置等
本例中创建vm.csv文件
第一行:
NamePrefix,Name,ResourcePool,vmHost,vmDatastore,IP,baseVM
NamePrefix: 指定名称前缀,如Test-VM-
Name: 虚拟机名称,如以业务命名,Nginx01
ResourcePool: 部署的资源池,如 web-project
vmHost: 部署到哪个主机,可以指定具体某台ESXi名称,前一项指定了ResourcePool,本项可以留空
vmDatastore: 部署到哪个存储LUN,也可以指定某个Cluster
IP: 要配置的虚拟机ip地址,如果要设置静态ip,可以作为参数传入
baseVM: 从哪个虚拟机复制,或从哪个模板部署,如 Template-CentOS7.9
还有很多其他选项可以配置,具体可参考VMWare官方文档
四、Create 脚本
创建脚本 createvm.ps1
$vms = Import-CSV vm.csv
foreach ($vm in $vms){
# $Cluster = "" #指定放置到哪个Cluster
$resourcePool = Get-ResourcePool $vm.ResourcePool
$vmNamePrefix= $vm.NamePrefix
$baseVM = Get-Template $vm.baseVM
$vmHost = $vm.vmHost
$dataStore = $vm.vmDatastore
# 设置虚拟机名称格式,NamePrefix + Name + ipSuffix
$tempArr = $vm.IP.Split('.')
$ipSuffix = '-' + $tempArr[2] + '.' + $tempArr[3]
$vmName = $vmNamePrefix + $vm.Name + $ipSuffix
#复制虚拟机
#New-VM -VM $baseVM -Name $vmName -ResourcePool $resourcePool -VMHost $vmHost -Datastore $dataStore -RunAsync
#从模板创建虚拟机
New-VM -Template $baseVM -Name $vmName -ResourcePool $resourcePool -VMHost $vmHost -Datastore $dataStore -RunAsync
}
五、执行脚本
切换到脚本所在目录,运行脚本,即可批量创建好虚拟机
PS D:\VMWare\PowerCLi> .\createvm.ps1
六、开机
开机脚本
foreach ($vm in $vms){
$tempArr = $vm.IP.Split('.')
$ipPostfix = '-' + $tempArr[2] + '.' + $tempArr[3]
$vmName1 = $vm.NamePrefix + $vm.Name + $ipPostfix
$Task = Start-VM -VM $vmName1 -RunAsync
echo $vmName1 + "Starting..."
}
# 启动虚拟机 每隔3s检测一次VMWare Tools状态,判断虚拟机是否已经启动完成
do{
sleep 3
$vmName1 = Get-VM $vmName1
$toolsStatus = $vmName1.extensionData.Guest.ToolsStatus
echo "Wait for System Ready..." $toolsStatus
}while($toolsStatus -ne "toolsOK")
sleep 5
七、修改密码
模板的默认账户/密码
$User = "root" #虚拟机模板默认用户名
$passwd = "password" #虚拟机模板默认用户名
生成随机密码
$Assembly = Add-Type -AssemblyName System.Web
$newPass = [System.Web.Security.Membership]::GeneratePassword(8,2)
修改默认密码
foreach ($vm in $vms){
$tempArr = $vm.IP.Split('.')
$ipPostfix = '-' + $tempArr[2] + '.' + $tempArr[3]
$vmName2 = $vm.NamePrefix + $vm.Name + $ipPostfix
# 修改密码命令
$script = "echo root:" + "'" + $newPass + "'" + "|chpasswd;$"
Get-VM $vmName2 | Invoke-VMScript -GuestUser $User -GuestPassword $passwd -ScriptText $script -ScriptType Bash
}
# 将新密码输出到console端
echo "New Password:" $newPass
八、总结
以上是最基本的PowerCli应用,在实际使用中还会有更复杂的需求,可以写出更加智能化的运维脚本,让工作更轻松,减少加班,哈哈