84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
"""Inventory lookups via official pulumi-vsphere (SOAP/VIM)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
import pulumi
|
|
import pulumi_vsphere as vsphere
|
|
|
|
user = os.environ.get("VSPHERE_USER", "administrator@vsphere.local")
|
|
password = os.environ.get("VSPHERE_PASSWORD", "VMware1!")
|
|
server = os.environ.get("VSPHERE_SERVER", "api-gateway")
|
|
datacenter_name = os.environ.get("VSPHERE_DATACENTER", "Datacenter")
|
|
datastore_name = os.environ.get("VSPHERE_DATASTORE", "datastore1")
|
|
cluster_name = os.environ.get("VSPHERE_CLUSTER", "Cluster")
|
|
network_name = os.environ.get("VSPHERE_NETWORK", "VM Network")
|
|
vm_name = os.environ.get("VSPHERE_VM_NAME", "web-01")
|
|
host_name = os.environ.get("VSPHERE_HOST", "esxi01.lab.local")
|
|
folder_path = os.environ.get("VSPHERE_FOLDER_PATH", f"/{datacenter_name}/vm/production")
|
|
pool_name = os.environ.get("VSPHERE_RESOURCE_POOL", "Resources")
|
|
|
|
provider = vsphere.Provider(
|
|
"vsphere",
|
|
user=user,
|
|
password=password,
|
|
vsphere_server=server,
|
|
allow_unverified_ssl=True,
|
|
)
|
|
|
|
invoke_opts = pulumi.InvokeOptions(provider=provider)
|
|
|
|
dc = vsphere.get_datacenter_output(name=datacenter_name, opts=invoke_opts)
|
|
ds = vsphere.get_datastore_output(
|
|
name=datastore_name,
|
|
datacenter_id=dc.id,
|
|
opts=invoke_opts,
|
|
)
|
|
cluster = vsphere.get_compute_cluster_output(
|
|
name=cluster_name,
|
|
datacenter_id=dc.id,
|
|
opts=invoke_opts,
|
|
)
|
|
network = vsphere.get_network_output(
|
|
name=network_name,
|
|
datacenter_id=dc.id,
|
|
opts=invoke_opts,
|
|
)
|
|
vm = vsphere.get_virtual_machine_output(
|
|
name=vm_name,
|
|
datacenter_id=dc.id,
|
|
opts=invoke_opts,
|
|
)
|
|
host = vsphere.get_host_output(
|
|
name=host_name,
|
|
datacenter_id=dc.id,
|
|
opts=invoke_opts,
|
|
)
|
|
folder = vsphere.get_folder_output(path=folder_path, opts=invoke_opts)
|
|
# Prefer cluster-scoped path so a polluted lab with multiple "Resources" pools
|
|
# (e.g. leftover probe datacenters) still resolves uniquely.
|
|
pool = vsphere.get_resource_pool_output(
|
|
name=f"{cluster_name}/{pool_name}",
|
|
datacenter_id=dc.id,
|
|
opts=invoke_opts,
|
|
)
|
|
|
|
pulumi.export("datacenter_id", dc.id)
|
|
pulumi.export("datacenter_name", dc.name)
|
|
pulumi.export("datastore_id", ds.id)
|
|
pulumi.export("datastore_name", ds.name)
|
|
pulumi.export("cluster_id", cluster.id)
|
|
pulumi.export("cluster_name", cluster.name)
|
|
pulumi.export("resource_pool_id", pool.id)
|
|
pulumi.export("resource_pool_name", pool.name)
|
|
pulumi.export("cluster_resource_pool_id", cluster.resource_pool_id)
|
|
pulumi.export("network_id", network.id)
|
|
pulumi.export("network_name", network.name)
|
|
pulumi.export("vm_id", vm.id)
|
|
pulumi.export("vm_name", vm.name)
|
|
pulumi.export("host_id", host.id)
|
|
pulumi.export("host_name", host.name)
|
|
pulumi.export("folder_id", folder.id)
|
|
pulumi.export("folder_path", folder.path)
|