'Wraps return value of _build_target_replicas_by_tier to include
pre-calculated min and max values for each tier.
:returns: a dict, mapping <tier> => <replica_plan>, where
<replica_plan> is itself a dict
<replica_plan> include at least the following keys:
min - the minimum number of replicas at the tier
target - the target replicanths at the tier
max - the maximum number of replicas at the tier'

def _build_replica_plan(self):

    target_replicas = self._build_target_replicas_by_tier()
    replica_plan = defaultdict((lambda : {'min': 0, 'target': 0, 'max': 0}))
    replica_plan.update({t: {'min': math.floor((r + 1e-10)), 'target': r, 'max': math.ceil((r - 1e-10))} for (t, r) in target_replicas.items()})
    return replica_plan
