自动化 vSphere 配置文件 API – 第 2 部分 – PowerCLI 与 Python 示例代码
发布: (2026年2月18日 GMT+8 16:42)
4 分钟阅读
原文: VMware Blog
Source: VMware Blog
vSphere 配置文件 API – Python 示例
作者: Jatin Purohit
职称: 产品营销工程师,Broadcom
将集群转换为由 vSphere 配置文件管理
import requests
import urllib3
import json
import time
from vmware.vapi.vsphere.client import create_vsphere_client
# ESXi settings services
from com.vmware.esx.settings.clusters.enablement_client import Configuration
from com.vmware.esx.settings.clusters_client import Configuration as ClusterConfiguration
from com.vmware.esx.settings.clusters.enablement.configuration_client import Transition
from com.vmware.esx.settings.clusters.configuration.reports_client import LastComplianceResult
from com.vmware.esx.settings.clusters.configuration_client import Drafts
# -------------------------------------------------------------------------
# Create a vSphere client session
# -------------------------------------------------------------------------
session = requests.session()
session.verify = False # Disable SSL verification (for demo only)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
vsphere_client = create_vsphere_client(
server='vc_fqdn_or_ip',
username='vc_username',
password='vc_password',
session=session
)
print(f"\033[92mConnected to vCenter Server, Session ID: \033[0m{vsphere_client.session_id}")
# =============================================================================
# 1️⃣ Transition a cluster to be managed by vSphere Configuration Profile
# =============================================================================
# -------------------------------------------------------------------------
# Check VCP enablement status on the cluster
# -------------------------------------------------------------------------
print("\033[92m1. Checking VCP Configuration for cluster: domain-c10 \033[0m")
print("GET /esx/settings/clusters/:cluster/enablement/configuration")
vcp_service = Configuration(vsphere_client._stub_config)
result = vcp_service.get(cluster="domain-c10")
print(f"\033[92mvSphere Configuration Profile Enablement Status on cluster domain-c10: \033[0m{result.enabled}")
# -------------------------------------------------------------------------
# Invoke cluster eligibility check for VCP transition
# -------------------------------------------------------------------------
print("\n\033[92m2. Invoking Cluster Eligibility Check for Configuration Transition... \033[0m")
print("POST /esx/settings/clusters/:cluster/enablement/configuration/transition?action=checkEligibility&vmw-task=true")
transition_service = Transition(vsphere_client._stub_config)
check_eligibility_task = transition_service.check_eligibility_task(cluster="domain-c10")
print(f"\033[92mCluster Eligibility check initiated successfully. VMware Task ID: \033[0m{check_eligibility_task.task_id}")
time.sleep(120) # Wait for the task to complete (adjust as needed)
# -------------------------------------------------------------------------
# Import Configuration Profile from a reference host
# -------------------------------------------------------------------------
print("\n\033[92m3. Importing Configuration Profile from reference Host for VCP Transition... \033[0m")
print("POST /esx/settings/clusters/:cluster/enablement/configuration/transition?action=importFromHost&vmw-task=true")
import_task = transition_service.import_from_host_task(cluster="domain-c10", host="host-13")
print(f"\033[92mConfiguration Profile import initiated successfully. VMware Task ID: \033[0m{import_task.task_id}")
time.sleep(120)
# -------------------------------------------------------------------------
# Validate the imported Configuration Profile
# -------------------------------------------------------------------------
print("\n\033[92m4. Validating Imported Cluster Configuration Profile for VCP Transition... \033[0m")
print("POST /esx/settings/clusters/:cluster/enablement/configuration/transition")
?action=validateConfig&vmw-task=true")
validate_task = transition_service.validate_config_task(cluster="domain-c10")
print(f"\033[92mConfiguration Profile validation initiated successfully. VMware Task ID: \033[0m{validate_task.task_id}")
time.sleep(120)
# -------------------------------------------------------------------------
# Enable VCP on the cluster using the imported profile
# -------------------------------------------------------------------------
print("\n\033[92m5. Enabling VCP on Cluster using Imported Configuration Profile... \033[0m")
print("POST /esx/settings/clusters/:cluster/enablement/configuration/transition?action=enable&vmw-task=true")
enable_task = transition_service.enable_task(cluster="domain-c10")
print(f"\033[92mVCP Enablement initiated successfully. VMware Task ID: \033[0m{enable_task.task_id}")
time.sleep(120)
# -------------------------------------------------------------------------
# Verify VCP enablement status after transition
# -------------------------------------------------------------------------
print("\n\033[92m6. Checking VCP Configuration for cluster: domain-c10 \033[0m")
print("GET /esx/settings/clusters/:cluster/enablement/configuration")
vcp_service = Configuration(vsphere_client._stub_config)
result = vcp_service.get(cluster="domain-c10")
print(f"\033[92mvSphere Configuration Profile Enablement Status on cluster domain-c10: \033[0m{result.enabled}")
管理集群的期望状态配置 (DSC)
# =============================================================================
# 2️⃣ Manage Desired State Configuration (DSC) on the Cluster
# =============================================================================
# -------------------------------------------------------------------------
# Check cluster compliance status with Desired State Configuration
# -------------------------------------------------------------------------
print("\n\033[92m7. Checking Cluster Compliance Status with Desired State Configuration... \033[0m")
print("GET /esx/settings/clusters/:cluster/configuration?action=checkCompliance&vmw-task=true")
compliance_service = ClusterConfiguration(vsphere_client._stub_config)
compliance_task = compliance_service.check_compliance_task(cluster="domain-c10")
print(f"\033[92mCluster Compliance Status task ID: \033[0m{compliance_task.get_task_id()}")
# -------------------------------------------------------------------------
# Retrieve the latest compliance result
# -------------------------------------------------------------------------
print("\n\033[92m8. Validating Cluster Desired State Configuration Compliance Results... \033[0m")
print("GET /esx/settings/clusters/:cluster/configuration/reports/last-compliance-result")
report_service = LastComplianceResult(vsphere_client._stub_config)
compliance_report = report_service.get(cluster="domain-c10")
print(f"\033[92mCompliance Result Status: \033[0m{compliance_report.cluster_status}")
# -------------------------------------------------------------------------
# Create a configuration draft for the cluster
# -------------------------------------------------------------------------
print("\n\033[92m9. Creating Configuration Draft for Cluster... \033[0m")
print("POST /esx/settings/clusters/:cluster/configuration/drafts")
draft_service = Drafts(vsphere_client._stub_config)
draft_id = draft_service.create(cluster="domain-c10")
print(f"\033[92mDraft created with ID: \033[0m{draft_id}")
注意
- 脚本禁用了 SSL 验证 (
session.verify = False) 并抑制了相关警告——这仅在受信任的测试环境中适用。 time.sleep(120)被用作等待异步任务完成的简易方式;在生产环境中应轮询任务状态,而不是使用固定延迟。- 将占位符值(
vc_fqdn_or_ip、vc_username、vc_password、domain-c10、host-13)替换为您环境中的实际标识符。
Configuration Draft created successfully, Draft ID: {draft_id}
print(“\n\033[92m10. Exporting Cluster Configuration from Draft…\033[0m”)
→ 10. 正在从草稿导出集群配置…
print(“POST /esx/settings/clusters/:cluster/configuration/drafts/{draft}?action=exportConfig”) draft_config = draft_service.export_config(cluster=“domain-c10”, draft=draft_id) print(draft_config)