public Optional<Predicate> getPredicate(ProvisionStep action) {
    return Optional.ofNullable(predicates.get(action));
  }
Builds predicates to be used in the "update host component state" requests, one for each {@link ProvisionStep}.

By default all components are both installed and started (except client components, but that exception is handled in
HostComponentResourceProvider, not here).  This can be customized at the request-, service-, and component levels in
the Add Service request.  Actions are inherited at the lower levels, so the request-level action applies to all
services that have no custom action given, and the effective service-level action applies to all components of the
given service with similar restriction.  The request and each service can specify exactly one {@code ProvisionAction},
but at the component level the same component may have different action for groups of hosts.

The predicates need to filter by service name (to avoid affecting existing services), and apply any component-level
overrides by further checking for component name and host name.

Example:
<pre>
cluster_name=TEST
AND
(
  (
    service_name=AMBARI_METRICS
    AND
    (
      component_name=METRICS_MONITOR
      OR
      component_name=METRICS_COLLECTOR
    )
  )
  OR
  (
    service_name=KAFKA
    AND
    (
      component_name=KAFKA_BROKER
      AND
      host_name=c7402
    )
  )
)
</pre>
ambari-server/src/main/java/org/apache/ambari/server/topology/addservice/ProvisionActionPredicateBuilder.java