package io.cattle.platform.allocator.constraint;
import io.cattle.platform.allocator.service.AllocationAttempt;
import io.cattle.platform.allocator.service.AllocationLog;
import io.cattle.platform.core.constants.NetworkConstants;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.docker.constants.DockerInstanceConstants;
import io.cattle.platform.json.JsonMapper;
import io.cattle.platform.object.util.DataAccessor;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
public class NetworkContainerConstraintProvider extends CollocationChecker implements AllocationConstraintsProvider {
@Inject
JsonMapper jsonMapper;
@Override
public void appendConstraints(AllocationAttempt attempt, AllocationLog log, List<Constraint> constraints) {
for (Instance instance : attempt.getInstances()) {
String networkMode = DataAccessor.fields(instance).withKey(DockerInstanceConstants.FIELD_NETWORK_MODE).as(String.class);
if (NetworkConstants.NETWORK_MODE_CONTAINER.equals(networkMode) && instance.getNetworkContainerId() != null) {
Long containerId = instance.getNetworkContainerId();
Set<Long> containerIds = new HashSet<Long>();
containerIds.add(containerId);
Map<Long, Set<Long>> hostsToInstances = checkAndGetCollocatedInstanceHosts(containerIds, attempt.getInstances());
for (Map.Entry<Long, Set<Long>> hostToInstances : hostsToInstances.entrySet()) {
constraints.add(new CollocationConstraint(hostToInstances.getKey(), hostToInstances.getValue()));
}
}
}
}
@Override
public boolean isCritical() {
return false;
}
}