protected void populateVolume(Map<String, Object> instanceMetadata, Instance instance, Volume volume) { if (volume == null) { return; } Integer deviceNumber = volume.getDeviceNumber(); if (deviceNumber == null) { return; } char index = (char) ('a' + deviceNumber.intValue()); if (deviceNumber == 0) { setNestedValue(instanceMetadata, String.format("/dev/sd%s", index), "block-device-mapping", "ami"); setNestedValue(instanceMetadata, String.format("/dev/sd%s1", index), "block-device-mapping", "root"); } else { setNestedValue(instanceMetadata, "sd" + index, "block-device-mapping", "ebs" + (deviceNumber + 1)); } // TODO do something about swap and ephemeral }
protected Volume getRoot(Instance instance, List<Volume> volumes) { if (instance.getImageId() == null) { return null; } for (Volume volume : volumes) { if (volume.getDeviceNumber() != null && volume.getDeviceNumber().intValue() == 0) { return volume; } } return objectManager.create(Volume.class, VOLUME.ACCOUNT_ID, instance.getAccountId(), VOLUME.INSTANCE_ID, instance.getId(), VOLUME.IMAGE_ID, instance .getImageId(), VOLUME.DEVICE_NUMBER, 0, VOLUME.ATTACHED_STATE, CommonStatesConstants.ACTIVE); }
protected void storage(Instance instance, Map<String, Object> data) { List<Volume> volumes = getObjectManager().children(instance, Volume.class); for (Volume volume : volumes) { if (volume.getDeviceNumber() == 0) { remove(volume, data); } else { execute("volume.detach", volume, null); } } Map<Object, Object> criteria = new HashMap<Object, Object>(); criteria.put(MOUNT.REMOVED, new Condition(ConditionType.NULL)); criteria.put(MOUNT.STATE, new Condition(ConditionType.NOTIN, MountDeactivate.MOUNT_STATES)); criteria.put(MOUNT.INSTANCE_ID, instance.getId()); List<Mount> mounts = getObjectManager().find(Mount.class, criteria); for (Mount mount : mounts) { objectProcessManager.scheduleStandardProcess(StandardProcess.DEACTIVATE, mount, data); } }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Volume volume = (Volume) state.getResource(); String driver = DataAccessor.fieldString(volume, VolumeConstants.FIELD_VOLUME_DRIVER); Long driverId = volume.getStorageDriverId(); Integer deviceNum = volume.getDeviceNumber(); StorageDriver storageDriver = objectManager.loadResource(StorageDriver.class, driverId); if (storageDriver == null && StringUtils.isNotBlank(driver)) { storageDriver = objectManager.findAny(StorageDriver.class, STORAGE_DRIVER.ACCOUNT_ID, volume.getAccountId(), STORAGE_DRIVER.REMOVED, null, STORAGE_DRIVER.NAME, driver); } if (storageDriver != null) { driver = storageDriver.getName(); driverId = storageDriver.getId(); deviceNum = -1; } HandlerResult result = new HandlerResult(VolumeConstants.FIELD_VOLUME_DRIVER, driver, VOLUME.DEVICE_NUMBER, deviceNum, VOLUME.STORAGE_DRIVER_ID, driverId); Long hostId = volume.getHostId(); if (storageDriver != null && hostId != null) { if (storagePoolDao.associateVolumeToPool(volume.getId(), storageDriver.getId(), hostId) != null) { result.withShouldContinue(false) .withChainProcessName(objectProcessManager.getStandardProcessName(StandardProcess.DEACTIVATE, volume)); } } return result; }
setPhysicalSizeMb(from.getPhysicalSizeMb()); setVirtualSizeMb(from.getVirtualSizeMb()); setDeviceNumber(from.getDeviceNumber()); setFormat(from.getFormat()); setAllocationState(from.getAllocationState());