@Override public void allocateIpToServiceIndex(Service service, ServiceIndex serviceIndex, List<String> requestedIps) { if (StringUtils.isEmpty(serviceIndex.getAddress())) { String ntwkMode = networkService.getNetworkMode(DataAccessor .fieldMap(service, ServiceConstants.FIELD_LAUNCH_CONFIG)); if (ntwkMode == null) { return; } Network ntwk = networkService.resolveNetwork(serviceIndex.getAccountId(), ntwkMode.toString()); if (networkService.shouldAssignIpAddress(ntwk)) { IPAssignment assignment = networkService.assignIpAddress(ntwk, serviceIndex, requestedIps); if (assignment != null) { setServiceIndexIp(serviceIndex, assignment.getIpAddress()); } } } }
@Override public void releaseIpFromServiceIndex(Service service, ServiceIndex serviceIndex) { if (!StringUtils.isEmpty(serviceIndex.getAddress())) { String ntwkMode = networkService.getNetworkMode(DataAccessor .fieldMap(service, ServiceConstants.FIELD_LAUNCH_CONFIG)); if (ntwkMode == null) { return; } Network ntwk = networkService.resolveNetwork(serviceIndex.getAccountId(), ntwkMode); networkService.releaseIpAddress(ntwk, serviceIndex); } }
labels.remove(SystemLabels.LABEL_RANCHER_NETWORK); String mode = networkService.getNetworkMode(DataUtils.getFields(instance)); data.put(DockerInstanceConstants.FIELD_NETWORK_MODE, mode); Network network = networkService.resolveNetwork(instance.getAccountId(), mode); if (network == null && StringUtils.isNotBlank(mode) && !instance.getNativeContainer()) { objectProcessManager.scheduleProcessInstance(InstanceConstants.PROCESS_REMOVE, instance, null);
protected IpAddress getIpAddress(Nic nic, Network network) { IpAddress ipAddress = ipAddressDao.getPrimaryIpAddress(nic); if (ipAddress == null && networkService.shouldAssignIpAddress(network)) { ipAddress = ipAddressDao.mapNewIpAddress(nic, IP_ADDRESS.ROLE, IpAddressConstants.ROLE_PRIMARY, IP_ADDRESS.NETWORK_ID, nic.getNetworkId()); } for (IpAddressNicMap map : mapDao.findNonRemoved(IpAddressNicMap.class, Nic.class, nic.getId())) { getObjectProcessManager().executeStandardProcess(StandardProcess.CREATE, map, null); } if (ipAddress != null) { getObjectProcessManager().executeStandardProcess(StandardProcess.CREATE, ipAddress, null); } return ipAddress; }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { IpAddress ipAddress = (IpAddress) state.getResource(); Network network = objectManager.loadResource(Network.class, ipAddress.getNetworkId()); if (network == null) { return null; } networkService.releaseIpAddress(network, ipAddress); return null; } }
protected IPAssignment allocateIp(IpAddress ipAddress, Network network) { Instance instance = getInstanceForPrimaryIp(ipAddress); IPAssignment ip = null; String requestedIp = null; if (instance != null) { String allocatedIpAddress = DataAccessor .fieldString(instance, InstanceConstants.FIELD_ALLOCATED_IP_ADDRESS); if (allocatedIpAddress != null) { ip = new IPAssignment(allocatedIpAddress, null); } requestedIp = DataAccessor.fieldString(instance, InstanceConstants.FIELD_REQUESTED_IP_ADDRESS); } if (ip == null) { List<String> list = new ArrayList<>(); if (!StringUtils.isEmpty(requestedIp)) { list = Arrays.asList(StringUtils.stripAll(StringUtils.split(requestedIp, ","))); } ip = networkService.assignIpAddress(network, ipAddress, list); if (ip == null) { objectProcessManager.scheduleStandardProcess(StandardProcess.DEACTIVATE, ipAddress, null); throw new ResourceExhaustionException("IP allocation error", "Failed to allocate IP from subnet", ipAddress); } } return ip; }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { IpAddress ipAddress = (IpAddress) state.getResource(); Network network = objectManager.loadResource(Network.class, ipAddress.getNetworkId()); if (!networkService.shouldAssignIpAddress(network)) { return null; } String assignedIp = ipAddress.getAddress(); Long subnetId = ipAddress.getSubnetId(); IPAssignment assignment = allocateIp(ipAddress, network); if (assignment != null) { assignedIp = assignment.getIpAddress(); if (assignment.getSubnet() != null) { subnetId = assignment.getSubnet().getId(); } } return new HandlerResult( IP_ADDRESS.ADDRESS, assignedIp, IP_ADDRESS.SUBNET_ID, subnetId, IP_ADDRESS.NAME, StringUtils.isBlank(ipAddress.getName()) ? assignedIp : ipAddress.getName()); }