@Override public String toString() { StringBuilder sb = new StringBuilder(); for (Port port: ports) { if (sb.length() > 0) { sb.append(", "); } sb.append(port.getPublicPort()); sb.append("/"); sb.append(port.getProtocol()); } return String.format("host needs ports %s available", sb.toString()); } }
protected String toKey(Port port) { return String.format("%d:%d/%s", port.getPublicPort(), port.getPrivatePort(), port.getProtocol()); }
public PortSpec(Port port) { this.ipAddress = DataAccessor.fieldString(port, PortConstants.FIELD_BIND_ADDR); this.publicPort = port.getPublicPort(); this.privatePort = port.getPrivatePort(); this.protocol = port.getProtocol(); }
@Override public boolean matches(AllocationCandidate candidate) { if (candidate.getHost() == null) { return false; } // TODO: Performance improvement. Move more of the filtering into the DB query itself List<Port> portsUsedByHost = candidate.getUsedPorts(); for (Port portUsed : portsUsedByHost) { for (Port requestedPort : ports) { if (requestedPort.getPublicPort() != null && requestedPort.getPublicPort().equals(portUsed.getPublicPort()) && publicIpTheSame(requestedPort, portUsed) && requestedPort.getProtocol().equals(portUsed.getProtocol())) { return false; } } } return true; }
@Override public void appendConstraints(AllocationAttempt attempt, AllocationLog log, List<Constraint> constraints) { Set<String> duplicatePorts = new HashSet<String>(); boolean checkForDupes = attempt.getInstances().size() > 1; for (Instance instance : attempt.getInstances()) { List<Port> ports = objectManager.find(Port.class, PORT.INSTANCE_ID, instance.getId(), PORT.REMOVED, null); if (checkForDupes) { for (Port port : ports) { String p = String.format("%s/%s", port.getPublicPort(), port.getProtocol()); if (!duplicatePorts.add(p)) { throw new FailedToAllocate(String.format("Port %s requested more than once.", p)); } } } if (ports.size() > 0) { constraints.add(new PortsConstraint(instance.getId(), ports)); } } }
for (Port port : objectManager.children(instance, Port.class)) { if (port.getPrivatePort().equals(privatePort) && StringUtils.equals(port.getProtocol(), protocol) && (port.getPublicPort() == null || port.getPublicPort().equals(publicPort))) { DataAccessor.setField(port, BIND_ADDRESS, ipAddress);
private ResourceRequest populateResourceRequestFromInstanceForPort(Instance instance, String resourceType, String poolType, String schedulerVersion, List<Port> newPorts) { PortBindingResourceRequest request = new PortBindingResourceRequest(); if (useLegacyPortAllocation(schedulerVersion)) { return null; } request.setResource(resourceType); request.setInstanceId(instance.getId().toString()); request.setResourceUuid(instance.getUuid()); List<PortSpec> portReservation = new ArrayList<>(); for (Port port : newPorts) { PortSpec spec = new PortSpec(); String bindAddress = DataAccessor.fieldString(port, BIND_ADDRESS); if (bindAddress != null) { spec.setIpAddress(bindAddress); } spec.setPrivatePort(port.getPrivatePort()); spec.setPublicPort(port.getPublicPort()); String proto = StringUtils.isEmpty(port.getProtocol()) ? "tcp" : port.getProtocol(); spec.setProtocol(proto); portReservation.add(spec); } if (portReservation.isEmpty()) { return null; } request.setPortRequests(portReservation); request.setType(poolType); return request; }
for (Port port : ports) { locks.add(new AllocateConstraintLock(AllocateConstraintLock.Type.PORT, String.format("%s.%s", port.getProtocol(), port.getPublicPort())));
String proto = StringUtils.isEmpty(port.getProtocol()) ? "tcp" : port.getProtocol(); spec.setProtocol(proto); portReservation.add(spec);
/** * {@inheritDoc} */ @Override public void from(io.cattle.platform.core.model.Port from) { setId(from.getId()); setName(from.getName()); setAccountId(from.getAccountId()); setKind(from.getKind()); setUuid(from.getUuid()); setDescription(from.getDescription()); setState(from.getState()); setCreated(from.getCreated()); setRemoved(from.getRemoved()); setRemoveTime(from.getRemoveTime()); setData(from.getData()); setPublicPort(from.getPublicPort()); setPrivatePort(from.getPrivatePort()); setInstanceId(from.getInstanceId()); setPublicIpAddressId(from.getPublicIpAddressId()); setProtocol(from.getProtocol()); setPrivateIpAddressId(from.getPrivateIpAddressId()); }