pulumiverse / pulumi-esxi-native

VMWare ESXi provider to provision VMs directly on an ESXi hypervisor without a need for vCenter or vSphere.
Apache License 2.0
6 stars 3 forks source link
pulumi pulumi-provider

Pulumi Native ESXi Provider

This repository crates a VMWare ESXi provider to provision VMs directly on an ESXi hypervisor without a need for vCenter or vSphere.

ci release

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.

IMPORTANT NOTES!

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

Requirements

Features and Compatibility

Why this provider?

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!

How to install

The Pulumi ESXi Native provider is available as a package in all Pulumi languages:

Provider Binary

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.

How to use and configure

In order to use the provider, we need to provide SSH credentials to the ESXi Host

Set configuration using 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>

Set configuration using environment variables

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>"

Getting started example

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,
    };
}

Known issues with vmware_esxi