vCenter Deployment Tool (VDT) Fails with "not well-formed" XML Error Due to unhealthy config.xml
search cancel

vCenter Deployment Tool (VDT) Fails with "not well-formed" XML Error Due to unhealthy config.xml

book

Article ID: 409868

calendar_today

Updated On:

Products

VMware vCenter Server

Issue/Introduction

During an upgrade readiness assessment for vCenter Server (from 7.0 Update 3t to 8.0 Update 3g), the VMware vCenter Deployment Tool (VDT) diagnostic script (vdt.py) failed to execute on one of the vCenter Server Appliances. The script returned a critical xml.etree.ElementTree.ParseError: not well-formed (invalid token) error, specifically pointing to line 124, column 8 within the /etc/vmware-rhttpproxy/config.xml file. This error prevented the pre-upgrade validation from completing, blocking the upgrade readiness assessment.

Initializing VDT...
There was an issue running the product plugin (vcenter) Please review the help and select the correct product if available.

Backtrace:

Traceback (most recent call last):
  File "vdt.py", line 92, in main
    ProductRunner.run(args.product)
  File "/vdt-2.2.5_09-05-2025/lib/vdt_base.py", line 456, in run
    return self.safe_execute(item, username, password)
  File "/vdt-2.2.5_09-05-2025/lib/vdt_base.py", line 426, in safe_execute
    return self.execute(params, username, password)
  File "/vdt-2.2.5_09-05-2025/lib/vdt_base.py", line 381, in execute
    spec.loader.exec_module(script_exec)
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/vdt-2.2.5_09-05-2025/vcenter/vc_vdt.py", line 63, in <module>
    from vcenter.vc_cfg.current_defaults import httpsPort, service_status, sso_domain, version
  File "/vdt-2.2.5_09-05-2025/vcenter/vc_cfg/current_defaults.py", line 5, in <module>
    vc_defaults.setDefaults()
  File "/vdt-2.2.5_09-05-2025/vcenter/vc_cfg/vc_defaults.py", line 445, in setDefaults
    afd = VcConfig().__dict__
  File "/vdt-2.2.5_09-05-2025/vcenter/vc_cfg/vc_defaults.py", line 377, in __init__
    self.httpPort, self.httpsPort = get_rhttpProxy_config()
  File "/vdt-2.2.5_09-05-2025/vcenter/vc_cfg/vc_defaults.py", line 208, in get_rhttpProxy_config
    tree = ET.parse(os.path.join(rhttpProxyConfigDir, 'config.xml'))
  File "/usr/lib/python3.7/xml/etree/ElementTree.py", line 1197, in parse
    tree.parse(source, parser)
  File "/usr/lib/python3.7/xml/etree/ElementTree.py", line 598, in parse
self._root = parser._parse_whole(source)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 124, column 8

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "vdt.py", line 105, in <module>
    main()
  File "vdt.py", line 98, in main
    for frame in traceback.format_exception(e, limit=-5):
TypeError: format_exception() missing 2 required positional arguments: 'value' and 'tb'

Environment

  • vCenter 7.x
  • vCenter 8.x

Resolution

Steps:

  1. Take an offline snapshot of the affected vCenter Server Appliance (VCSA) as a crucial rollback point.
  2. Obtain a healthy config.xml file from the /etc/vmware-rhttpproxy/ directory of a vCenter Server Appliance that is running the exact same version and build number and is known to be healthy.
  3. Transfer the healthy config.xml file to the affected VCSA, replacing the unhealthy one (ensure to back up the original file first).
  4. Re-execute the vdt.py script to confirm its successful execution.
  5. Perform a successful reboot of the vCenter Server Appliance (which was also done in this case) to ensure all services fully recognize the updated configuration.