지난 2024년 11월을 기점으로 이제 VMware Workstation과 Fusion Pro가 상업, 비상업 관계없이 전면 무료로 제공됩니다. 글에서 소개한 것과 같이 VMware Workstation과 Fusion Pro가 전면 무료화되었었는데요, 그 덕분에 언제 어디서든 자유롭게 VMware를 사용할 수 있게 되었습니다.
VMware 자체도 강력하지만, 사실 VMware 고급 버전이 더 빛나는 이유는 강력한 수준의 자동화 도구를 갖추고 있기 때문입니다. 그래서 몇 달간 직접 사용해보면서, 여러 자동화 수단을 제공하지만 가장 확실하고 폭넓은 자동화 수단으로는 vmcli 명령줄 도구가 있다는 사실을 알게 되었습니다.
vmcli 도구는 Windows, Linux, macOS에서 모두 사용 가능한 명령줄 도구이니, 이 도구를 프로그래밍 방식으로 제어할 수 있게 만든다면 OS와 무관하게 VMware Workstation (Windows, Linux)과 VMware Fusion Pro (macOS)를 모두 제어할 수 있으니 유용하겠다는 생각이 들어 C#으로 사용하기 편리하게 NuGet 패키지를 제작해보았습니다.
.NET 6 이후부터 사용 가능하도록 디자인했고, .NET의 내장 Dependency Injection에 통합되도록 패키지를 설계했습니다. 다음은 코드 사용법 예시입니다.
appBuilder.Services.AddVmcliServices();
var app = appBuilder.Build();
var power = app.Services.GetRequiredService<VmcliPowerWrapper>();
var chipset = app.Services.GetRequiredService<VmcliChipsetWrapper>();
var configParams = app.Services.GetRequiredService<VmcliConfigParameterWrapper>();
var vm = app.Services.GetRequiredService<VmcliVmWrapper>();
var vmxFileInfo = await vm.CreateAsync(
vmxPath,
$"myVM", GuestOSTypes.Windows_Server_2025);
var vmxPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "vmware-test", "myVM.vmx");
var chipsetProps = await chipset.QueryAsync(vmxPath);
var vmProps = await configParams.QueryAsync(vmxPath);
await configParams.SetEntryAsync(vmxPath, VirtualMachineEntryNames.DisplayName, "myVM");
var diskPath = await wrapper.CreateVirtualDiskAsync(
vmdkPath, VirtualDiskAdapterType.IDE, "2GB", VirtualDiskType.SplittedGrowable);
var vmStatProps = await power.QueryAsync(vmxPath);
await power.StartAsync(vmxPath);
vmStatProps = await power.QueryAsync(vmxPath);
await power.StopAsync(vmxPath);
vmStatProps = await power.QueryAsync(vmxPath);
Windows의 경우, 관리자 권한 획득을 한 후에 위의 샘플 코드 실행이 가능합니다.