Changelog¶
The changelog format is based on Keep a Changelog.
This project uses Semantic Versioning - MAJOR.MINOR.PATCH
1.0.1.dev46+gb52cf7c9c (2026-07-20)¶
Fixed¶
Fix a batch of bugs surfaced when the
vcf_esxi_*state modules are applied against a real ESXi 9.1 host (build 25370933) instead of the in-memory mocks used by the test suite:utils/esxi.get_host_systemtraversal,esxi_ntp.getproperty access, andesxi_advanced.getreturn shape.Make
vcf_esxi_firewall,vcf_esxi_service, andvcf_vim_host_network.vswitch_presentcleanly idempotent so re-applying against an already-converged host produces zero changes. Adds a newvcf_esxi_firewall.global_enabledstate (maps toHostFirewallSystem.UpdateDefaultPolicy), renames the service-policy key to match the client, and stops treatingnum_portsas drift when ESXi auto-scales it.Make
vcf_vim_vm.presentparallel-safe (needed when a lab brings up 4 nested VMs concurrently viastate.orchestrate) and route standalone-ESXi datastore uploads through the correct endpoint.vim_vm_nic.addnow falls back to adeviceName-only NIC backing when the port group has novim.NetworkMO (which is the case for standalone-ESXi port groups that only carry VMkernel traffic). ESXi resolves the port group by name at attach time.
Added¶
Add
vim_vm_cdromclient +vcf_vim_vm_cdromexecution/state modules for CD-ROM device lifecycle (add, remove, attach ISO, detach), including the pyVmomi task-wait helper needed bystate.applyorchestration of a nested-ESXi lab.Add
esxi_vlcmclient,vcf_esxi_vlcmexecution module, andvcf_esxi_vlcmstate module for patching ESXi hosts via vCenter’s ESX Lifecycle Manager (vLCM) REST API: depot configuration/sync, desired-image drafts, cluster apply policy, and compliance/precheck/stage/remediate workflows.Add the SDDC Manager REST surface needed to drive VCF async patching directly (without shelling out to the
vcf-async-patch-toolCLI):sddc_bundles.upload/delete/for_skip_upgradefor offline bundle staging,sddc_releases.custom_patchesfor reading which async patches are registered on a domain, and a newsddc_personalitiesclient +vcf_sddc_personalitiesexecution module for vSphere cluster-image lifecycle. The enable/disable half of the async-patch workflow and the orchestrating state module are left as follow-ups pending lab reverse-engineering of thevcf-async-patch-tool -e --patchtraffic.Extend
vcf_vim_datastore_file.file_presentwithforceandmatch_sizeoptions so a re-run ofstate.applyre-uploads a file whose size differs from the local source or when the caller wants an unconditional overwrite (useful for iterating on nested-lab ISO builds).Extend
vcfops_resource_groupwithmembers(group_id)andlist_types()for the corresponding VCF Operations endpoints.New
vcf_vim_host_datastorestate module (vmfs_present,nfs_mounted,absent) wrapping the existing execution module so a VMFS datastore can be declared in a Salt state file — standalone-aware and vCenter-aware.New
vcf_vim_vmstate module for VM lifecycle (present/absent/power_*) against a standalone ESXi host, alongside port-group security-policy support (promiscuous/mac_changes/forged_transmits) onvim_host_networkfor nested-VM labs.Route every
vim_*client through a sharedutils/vim.resolve_host_systemhelper so state modules can target a standalone ESXi host with only thesaltext.vcf.esxipillar (no vCenter present). Detection is automatic based on which pillar block is populated; the vCenter path is unchanged.
1.0.0 (2026-06-07)¶
Breaking changes¶
Renamed project from
saltext-vmwaretosaltext-vcf. The PyPI distribution, GitHub repository, and Python import path (saltext.vmware->saltext.vcf) all change. Salt loader module names also rename fromvmware_*tovcf_*(e.g.vmware_vcenter_appliance->vcf_vcenter_appliance); update any state, pillar, or CLI references accordingly. VMware-defined identifiers (vmware_accepted/vmware_certifiedVIB acceptance levels,vmware_soap_sessioncookie,vmware-api-session-idheader,pyvmomi,vmware-vcenter/vmware-vcfPyPI dependencies) are unchanged.
Removed¶
Removed the
installer_credentials,installer_logs, andinstaller_systemclients and execution modules. Their/v1/system/security/passwords//v1/system/log-bundles//v1/system/*endpoints did not exist on the actual VCF Installer build;installer_bringupandfleet_passwordremain as the verified installer-side surfaces.
Changed¶
ESXi standalone clients (
esxi_advanced,esxi_firewall,esxi_host,esxi_ntp,esxi_service,esxi_syslog) andutils/esxinow use pyVmomi SOAP (SmartConnect//sdk) instead of REST/api/session. Shuttle-deployed lab hosts omit the vAPI endpoint entirely, and ESXi joined to vCenter blocks/api/sessionwith HTTP 400; SOAP is the universally available surface. The execution-module names and dunder keys (vcf_esxi_*) are unchanged.
Fixed¶
Fix several vCenter 9 / VCF 9 REST body shapes discovered against the live lab:
vcenter_content_library.update_session_add_filenow uses the path-style/api/content/library/item/update-session/{session_id}/file?action=add(the legacy POST/updatesession/fileshape 404s on vSphere 9);vcenter_content_library.create_local/create_subscribedsend the spec at the root (no morecreate_specwrapper);vcenter_appliance.dns_set/logging_forwarding_setuse PUT (PATCH returns 405);sddc_certificates.create_csrssends{csrGenerationSpec, resources}instead of a flat list.VDS and DPG (Distributed Port Group) lifecycle mutators (
vim_dvs.create/reconfigure/delete/add_host/remove_host,vim_dvs_portgroup._add/reconfigure/delete) now wait on the underlying pyVmomi*_Taskbefore returning. A sharedutils/vim.wait_for_taskhelper drives the wait. Previously callers raced the task andlist_()could return a stale view immediately after a successful-looking create.nsx_ipsec_vpn.create_ike_profile/create_tunnel_profile/create_dpd_profilenow auto-inject the appropriateresource_type(IPSecVpnIkeProfile/IPSecVpnTunnelProfile/IPSecVpnDpdProfile) so NSX 9 stops rejecting the PUT with HTTP 400. Callers can still override viaresource_type=in the spec.
Added¶
Added a
CLI Example:doc-example harness:tests/_doc_examplesparses everysalt '*' <mod>.<func> ...line out of module docstrings and exposes them to two passes.tests/unit/test_doc_examplesis a signature-check pass that asserts the virtual module name resolves and the documented args bind to the function. The companion saltext-vcf-integration repo runs the same parsed examples against a live VCF lab.Bootstrap the VCF Installer onto a bare ESXi host via pyVmomi OVF deploy.
clients/ovf_deployadds a tarball-parse +OvfManager.CreateImportSpec+HttpNfcLeasePUT pipeline (with vmware_soap_session cookie +Overwrite: theader so ESXi’s ha-nfc daemon authorizes the upload), a streaming HTTPS PUT for multi-GB VMDKs, andwait_for_task-driven power-on. State modulevcf_installer_applianceexposes this as a declarativeinstaller.runningworkflow.New topology + tooling clients:
automation_topology(cross-component view of a VCF Automation deployment),installer_topology(introspects the bringup spec / running installer), andovftool_deploy(subprocess wrapper aroundovftoolfor callers that prefer it over the pure-pyVmomi path).The vCenter per-request HTTP timeout is now configurable.
utils/vcenter.api_*helpers accept an optionaltimeout=kwarg; the default is also tunable via thesaltext.vcf.vcenter.timeoutpillar key.vcenter_content_library.ovf_deploydefaults totimeout=1800(30 min) so OVF deploys no longer race the previous hard-coded 30 s read timeout.VCF Automation (VCFA / Aria Automation 9.x) end-to-end integration: new
utils/vcfawith two-step CSP refresh-token auth, per-(host,user) token cache, transparent bearer re-mint on 401, configurable per-request timeout, multipart helper, and await_for_deploymentpoller. Eighteen new client / execution-module pairs cover cloud accounts, cloud zones, storage profiles, network profiles, projects, project users, cloud templates (blueprint versions), policies, catalog (items + sources), vRO packages, vRO configuration elements, workflow runs, ABX actions, action secrets, action subscriptions, resource actions, IAM role bindings, and custom roles.VCF Operations fleet certificate management: new
vcfops_fleet_certificatesclient + module covering the fleet-wide certificate inventory, renewal scheduling, and rotation operations exposed by VCF Operations (separate from the truststore surface invcfops_certificate). Contributed byDenys Aleksandrov <https://github.com/denysaleksandrov>_.VCF Operations fleet password and certificate surfaces: new
vcfops_fleet_passwords(the VCF 9.x replacement for the SDDC-Manager-backedfleet_password) wraps/suite-api/api/fleet-management/password-managementwith paginatedlist_,get_account,update, and acheck_expiry(threshold_days=90)helper that buckets accounts intook/expiring/noExpirywith ISO-rendered expiry dates. Newvcfops_certificatewraps the VCF Ops truststore (/suite-api/api/certificate) for list / get / delete by thumbprint.
0.1.0 (2026-05-14)¶
Added¶
VCF Installer (formerly Cloud Builder) support: utils + clients for system/bringup/credentials/logs, modules, declarative bringup state, plus live lab spin-up/teardown coverage in the integration repo. #3