自动化 vSphere 配置文件 API – 第 2 部分 – PowerCLI 与 Python 示例代码

发布: (2026年2月18日 GMT+8 16:42)
4 分钟阅读

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_ipvc_usernamevc_passworddomain-c10host-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)

Convert the returned object to a mutable

→ 将返回的对象转换为可变的

0 浏览
Back to Blog

相关文章

阅读更多 »

Python 生成器

生成器函数 生成器函数是一种特殊的函数,返回一个 lazy iterator。这些对象可以像列表一样进行遍历,但不同于 li...