EAM service fails to start with error "Invalid boolean value ${pmm.infra}" in vCenter Server
search cancel

EAM service fails to start with error "Invalid boolean value ${pmm.infra}" in vCenter Server

book

Article ID: 434554

calendar_today

Updated On:

Products

VMware vCenter Server

Issue/Introduction

  • The EAM service fails to start in vCenter Server, and the following error is seen in the EAM logs during service startup.
  • Logs on vCenter shows : /var/log/vmware/eam/web/localhost.log :  
YYYY-MM-DDT07:55:27.299Z |  INFO | main | ApplicationContext.java | 623 | No Spring WebApplicationInitializer types detected on classpath
YYYY-MM-DDT07:55:27.366Z |  INFO | main | ApplicationContext.java | 623 | Initializing Spring root WebApplicationContext
YYYY-MM-DDT07:55:30.217Z | ERROR | main | StandardContext.java | 4024 | Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'vcInventory' defined in class path resource [eam-server-vim-beans.xml]: Unsatisfied dependency expressed through constructor parameter 10: Could not convert argument value of type [java.lang.String] to required type [boolean]: Failed to convert value of type 'java.lang.String' to required type 'boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [${pmm.infra}]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:756) ~[spring-beans-5.3.42.jar:5.3.42]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:220) ~[spring-beans-5.3.42.jar:5.3.42]

 

  • In the EAM Spring configuration file:

/usr/lib/vmware-eam/config/eam-server-vim-beans.xml

the following entry exists:

<constructor-arg value="${pmm.infra}"/>

The value ${pmm.infra} is expected to be resolved from a properties file during service initialization.

However, the value is not resolved and is passed as a string, causing the boolean conversion to fail.

Environment

vCenter Server

Cause

The EAM service uses Spring configuration where property placeholders like ${pmm.infra} are loaded from property files such as:

/etc/vmware-eam/eam-vim.properties
/etc/vmware-eam/features.properties

During startup, the property loader resolves these placeholders before creating beans.

The vcInventory bean expects the parameter pmm.infra to be a boolean value:

true
or
false

If the property cannot be resolved, the literal value ${pmm.infra} is passed to the constructor.

Since the constructor expects a boolean, the conversion fails and EAM service startup stops.

This can happen when:

Property file is missing
Property entry is missing
Property value is empty
Property file corrupted
Incorrect file copied during patch / restore
Permission issue prevents reading the property file

In this case, the features.properties file did not contain a valid value for pmm.infra.

Resolution

  • Log in to the vCenter Server Appliance (vCSA) as root via SSH.

 

  • Navigate to the ESX Agent Manager (EAM) configuration directory:
    cd /etc/vmware-eam

 

  • Verify file ownership and permissions for the configuration files. All files must be owned by root:root with permissions set as shown below:

 

  • Validate the content of features.properties. 
    root@fqdn[ /etc/vmware-eam ]# cat features.properties
    #########################################################################
    # Copyright 2017-2023 VMware, Inc.
    # All rights reserved. VMware Confidential
    #########################################################################
    # The values will be updated on each EAM restart based on
    # Feature State Switch mappings from "features.json"
    use.sha256.hash.algorithm=false
    lccm.solutions=false
    inaccessible.system.vms=false
    quick.patch.partial.mm=true
    nsx.partial.mm=false
    pmm.infra=true

 

  • Validate the content of eam-vim.properties.
    Replace VCFQDN with the actual Fully Qualified Domain Name of the vCenter Server.
    If the ls.node.id is missing or incorrect, retrieve the correct GUID by running:
    cat /etc/vmware/install-defaults/vmdir.ldu-guid
    root@fqdn[ /etc/vmware-eam ]# cat eam-vim.properties
    #########################################################################
    # Copyright 2013-2022 VMware, Inc.  All rights reserved. VMware Confidential
    #########################################################################
    # VC location
    vc.proxy.host=localhost
    vc.proxy.port=80
    vc.tunnelSdkUri.template=https://##{VC_HOST_NAME}##:8089/sdk/vimService
    vc.tunnelSdkUri=https://VCFQDN:8089/sdk/vimService
    # VC SSL trust
    vc.truststore.type=VKS
    vc.truststore.storename=TRUSTED_ROOTS
    # EAM location
    # Hostname or IP of the EAM server
    # Fill only if EAM is not running on the same host as VC
    eam.host=VCFQDN
    # EAM AuthN
    #
    eam.keystore.type=VKS
    eam.keystore.storename=vpxd-extension
    eam.key.alias=vpxd-extension
    # EAM Service Account Authentication
    eam.service.account=
    eam.service.account.password.file=
    # LookupService
    ls.url=https://VCFQDN:443/lookupservice/sdk
    ls.node.id=xxxxxxxx-xxxx-xxxxx-xxxxx-xxxxxxxxxxx
    ############################################################################
    #
    # The data below is used by not-eam-vim beans hence is going to be moved out
    #
    ############################################################################
    # Port and scheme configuration which is used by the ESX 6.x hosts to reach EAM Vib
    # file server.
    eam.ext.port=9087
    eam.ext.scheme=https
    # Port and scheme configuration which is used by the ESX 5.x hosts to reach EAM Vib
    # file server.
    eam.ext.port.deprecated=80
    eam.ext.scheme.deprecated=http
    drs.demandCapacityRatio=100

 

  • If any file content is corrupted or incorrect, recreate the file using the corrected parameters from above.

 

  • Restart the EAM service to apply changes:
    service-control --restart vmware-eam