This repository crates a VMWare ESXi provider to provision VMs directly on an ESXi hypervisor without a need for vCenter or vSphere.
The repository is created based on the Terraform Provider terraform-provider-esxi. Thanks to the wonderful work done there by @josenk, I was able to build this provider for Pulumi users.
Note for Pull Requests (PRs): When creating a pull request, please do it onto the MAIN branch which is the consolidated work-in-progress branch. Do not request it onto another branch.
PLEASE Read our branch guide to know about our branching policy
CONTRIBUTING
IMPORTANT: The contribution details are stated here
NOTE:
ovftool
installer for windows doesn't put ovftool.exe in your path. You will need to manually set your path.
Google 'How to enable ssh access on esxi'
- In general, you should know how to use terraform, esxi and some networking...
If you do not have a vCenter or vSphere, especially if you are running a home lab, these services are expensive, and maybe you cannot have them, but the ESXi is free, so that is the reason behind it!
The Pulumi ESXi Native provider is available as a package in all Pulumi languages:
@pulumiverse/esxi-native
pulumiverse_esxi_native
github.com/pulumiverse/pulumi-esxi-native/sdk/go/esxi
Pulumiverse.EsxiNative
The ESXi Native provider binary is a third party binary. It can be installed using the pulumi plugin
command.
pulumi plugin install resource esxi-native <version> --server github://api.github.com/pulumiverse
Replace the <version>
string with your desired version.
In order to use the provider, we need to provide SSH credentials to the ESXi Host
pulumi config
Remember to pass --secret
when setting password
so that it is properly encrypted:
$ pulumi config set esxi-native:username <username>
$ pulumi config set esxi-native:password <password> --secret
$ pulumi config set esxi-native:host <host IP or FQDN>
For bash users
$ export ESXI_USERNAME=<YOUR_ESXI_USERNAME>
$ export ESXI_PASSWORD=<YOUR_ESXI_PASSWORD>
$ export ESXI_HOST=<YOUR_ESXI_HOST_IP>
For powershell users
> $env:ESXI_USERNAME = "<YOUR_ESXI_USERNAME>"
> $env:ESXI_PASSWORD = "<YOUR_ESXI_PASSWORD>"
> $env:ESXI_HOST = "<YOUR_ESXI_HOST>"
import * as esxi from "@pulumiverse/esxi-native";
export = async () => {
const vm = new esxi.VirtualMachine("vm-test", {
diskStore: "nvme-ssd-datastore",
networkInterfaces: [
{
virtualNetwork: "default"
}
]
});
return {
"id": vm.id,
"name": vm.name,
"os": vm.os,
};
}
ipAddress
if it's powered off.numVCpus
are supported, numCores
is not.startupTimeout
or shutdownTimeout
to 0 (zero). It's valid, however it will be changed to default values.