Java 类com.amazonaws.services.ec2.model.VolumeState 实例源码

项目:AWSConfig    文件:EC2UtilsImpl.java   
/**
 * This method returns list of EBS volumes which are available.
 * @return returns list of EBS volumes which are available.
 */
public List<Volume> getEBSVolumesAvailable(List<Volume> allEBSVolumes) {

    List<Volume> ebsVolumesAvailable = new ArrayList<>();

    for(Volume volume: allEBSVolumes) {
        if(volume.getState().equalsIgnoreCase(VolumeState.Available.toString())) {
            ebsVolumesAvailable.add(volume);
        }
    }

    System.out.println("INFO : Number of EBS volumes not in use : " + ebsVolumesAvailable.size());
    List<String> volumeIds = ebsVolumesAvailable.stream().map(e -> e.getVolumeId()).collect(Collectors.toList());
    System.out.println("INFO: EBS volumes not in use : " + volumeIds);

    return ebsVolumesAvailable;
}
项目:primecloud-controller    文件:AwsVolumeProcess.java   
/**
 * TODO: メソッドコメント
 * 
 * @param awsProcessClient
 * @param instanceNo
 * @param volumeNo
 */
public void stopVolume(AwsProcessClient awsProcessClient, Long instanceNo, Long volumeNo) {
    AwsVolume awsVolume = awsVolumeDao.read(volumeNo);

    // インスタンスIDがある場合、インスタンスからデタッチする
    if (StringUtils.isNotEmpty(awsVolume.getInstanceId())) {
        try {
            // ボリュームのデタッチ
            detachVolume(awsProcessClient, instanceNo, volumeNo);

            // ボリュームのデタッチ待ち
            waitDetachVolume(awsProcessClient, instanceNo, volumeNo);

        } catch (AutoException ignore) {
            // 情報が不整合(インスタンス異常終了時など)の場合、警告ログと後始末のみ行う
            log.warn(ignore.getMessage());

            awsVolume = awsVolumeDao.read(volumeNo);
            awsVolume.setStatus(VolumeState.Error.toString());
            awsVolume.setInstanceId(null);
            awsVolumeDao.update(awsVolume);
        }
    }
}
项目:enhanced-snapshots    文件:AWSRestoreVolumeStrategyTaskExecutor.java   
private Volume waitingTempVolumeStep(TaskEntry taskEntry) {
    checkThreadInterruption(taskEntry);
    setProgress(taskEntry, TaskProgress.WAITING_TEMP_VOLUME);
    Volume volumeDest = awsCommunication.waitForVolumeState(awsCommunication.getVolume(taskEntry.getTempVolumeId()), VolumeState.Available);
    LOG.info("Volume created: {}", volumeDest.toString());
    return volumeDest;
}
项目:primecloud-controller    文件:AwsCommonProcess.java   
public Volume waitVolume(AwsProcessClient awsProcessClient, String volumeId) {
    // ボリュームの処理待ち
    Volume volume;
    while (true) {
        try {
            Thread.sleep(1000L * awsProcessClient.getDescribeInterval());
        } catch (InterruptedException ignore) {
        }

        volume = describeVolume(awsProcessClient, volumeId);
        VolumeState state;
        try {
            state = VolumeState.fromValue(volume.getState());
        } catch (IllegalArgumentException e) {
            // 予期しないステータス
            AutoException exception = new AutoException("EPROCESS-000112", volume, volume.getState());
            exception.addDetailInfo("result=" + ReflectionToStringBuilder.toString(volume));
            throw exception;
        }

        // 安定状態のステータスになったら終了
        if (state == VolumeState.Available || state == VolumeState.InUse || state == VolumeState.Deleted
                || state == VolumeState.Error) {
            break;
        }
    }

    return volume;
}
项目:primecloud-controller    文件:AwsVolumeProcess.java   
public void waitCreateVolume(AwsProcessClient awsProcessClient, Long instanceNo, Long volumeNo) {
    AwsVolume awsVolume = awsVolumeDao.read(volumeNo);
    String volumeId = awsVolume.getVolumeId();

    // ボリュームの作成待ち
    Volume volume;
    try {
        volume = awsCommonProcess.waitVolume(awsProcessClient, volumeId);

        if (!StringUtils.equals(volume.getState(), VolumeState.Available.toString())) {
            // ボリューム作成失敗時
            AutoException exception = new AutoException("EPROCESS-000113", volumeId, volume.getState());
            exception.addDetailInfo("result=" + ReflectionToStringBuilder.toString(volume));
            throw exception;
        }

        // ログ出力
        if (log.isInfoEnabled()) {
            log.info(MessageUtils.getMessage("IPROCESS-100122", volumeId));
        }
    } catch (AutoException e) {
        // ボリューム作成失敗時
        awsVolume = awsVolumeDao.read(volumeNo);
        awsVolume.setVolumeId(null);
        awsVolume.setStatus(null);
        awsVolumeDao.update(awsVolume);

        throw e;
    }

    //イベントログ出力
    Component component = null;
    if (awsVolume.getComponentNo() != null) {
        component = componentDao.read(awsVolume.getComponentNo());
    }
    Instance instance = instanceDao.read(instanceNo);
    processLogger.debug(component, instance, "AwsEbsCreateFinish", new Object[] {
            awsProcessClient.getPlatform().getPlatformName(), awsVolume.getVolumeId(), awsVolume.getSize() });

    // データベース更新
    awsVolume = awsVolumeDao.read(volumeNo);
    awsVolume.setStatus(volume.getState());
    awsVolumeDao.update(awsVolume);
}
项目:primecloud-controller    文件:AwsVolumeProcess.java   
public void waitAttachVolume(AwsProcessClient awsProcessClient, Long instanceNo, Long volumeNo) {
    AwsVolume awsVolume = awsVolumeDao.read(volumeNo);
    String volumeId = awsVolume.getVolumeId();

    Volume volume = null;
    try {
        // volume = awsProcessClient.waitAttachVolume(volumeId, instanceId);
        // TODO: アタッチ情報がすぐに更新されない問題に暫定的に対応
        int retry = 6;
        for (int i = 0; i < retry; i++) {
            volume = awsCommonProcess.waitVolume(awsProcessClient, volumeId);
            if (StringUtils.equals(volume.getState(), VolumeState.InUse.toString())) {
                break;
            }
        }

        if (!StringUtils.equals(volume.getState(), VolumeState.InUse.toString())) {
            // アタッチに失敗した場合
            AutoException exception = new AutoException("EPROCESS-000115", awsVolume.getInstanceId(), volumeId,
                    volume.getState());
            exception.addDetailInfo("result=" + ReflectionToStringBuilder.toString(volume));
            throw exception;
        }

        // ログ出力
        if (log.isInfoEnabled()) {
            log.info(MessageUtils.getMessage("IPROCESS-100124", volumeId, awsVolume.getInstanceId()));
        }
    } catch (AutoException e) {
        // アタッチに失敗した場合
        awsVolume = awsVolumeDao.read(volumeNo);
        awsVolume.setStatus(VolumeState.Error.toString());
        awsVolume.setInstanceId(null);
        awsVolumeDao.update(awsVolume);

        throw e;
    }

    //イベントログ出力
    Component component = null;
    if (awsVolume.getComponentNo() != null) {
        component = componentDao.read(awsVolume.getComponentNo());
    }
    Instance instance = instanceDao.read(instanceNo);
    processLogger.debug(component, instance, "AwsEbsAttachFinish", new Object[] { instance.getInstanceName(),
            awsVolume.getVolumeId(), awsVolume.getDevice() });

    // データベースの更新
    awsVolume = awsVolumeDao.read(volumeNo);
    awsVolume.setStatus(volume.getState());
    awsVolumeDao.update(awsVolume);
}
项目:primecloud-controller    文件:AwsVolumeProcess.java   
public void waitDetachVolume(AwsProcessClient awsProcessClient, Long instanceNo, Long volumeNo) {
    AwsVolume awsVolume = awsVolumeDao.read(volumeNo);
    String volumeId = awsVolume.getVolumeId();
    String instanceId = awsVolume.getInstanceId();

    Volume volume = null;
    try {
        // TODO: アタッチ情報がすぐに更新されない問題に暫定的に対応
        int retry = 6;
        for (int i = 0; i < retry; i++) {
            volume = awsCommonProcess.waitVolume(awsProcessClient, volumeId);
            if (StringUtils.equals(volume.getState(), VolumeState.Available.toString())) {
                break;
            }
        }

        if (!StringUtils.equals(volume.getState(), VolumeState.Available.toString())) {
            // デタッチに失敗した場合
            AutoException exception = new AutoException("EPROCESS-000116", instanceId, volumeId, volume.getState());
            exception.addDetailInfo("result=" + ReflectionToStringBuilder.toString(volume));
            throw exception;
        }

        // ログ出力
        if (log.isInfoEnabled()) {
            log.info(MessageUtils.getMessage("IPROCESS-100126", volumeId, instanceId));
        }
    } catch (AutoException e) {
        // デタッチに失敗した場合
        awsVolume = awsVolumeDao.read(volumeNo);
        awsVolume.setStatus(VolumeState.Error.toString());
        awsVolume.setInstanceId(null);
        awsVolumeDao.update(awsVolume);

        throw e;
    }

    //イベントログ出力
    Component component = null;
    if (awsVolume.getComponentNo() != null) {
        component = componentDao.read(awsVolume.getComponentNo());
    }
    Instance instance = instanceDao.read(instanceNo);
    processLogger.debug(component, instance, "AwsEbsDetachFinish", new Object[] { instance.getInstanceName(),
            awsVolume.getVolumeId(), awsVolume.getDevice() });

    // データベースの更新
    awsVolume = awsVolumeDao.read(volumeNo);
    awsVolume.setStatus(volume.getState());
    awsVolume.setInstanceId(null);
    awsVolumeDao.update(awsVolume);
}