磁盘

创建CDS磁盘

支持新建空白CDS磁盘或者从CDS数据盘快照创建CDS磁盘,参考以下代码可以创建CDS磁盘:

// 新建CDS磁盘
public static void createVolume(BccClient bccClient) {
    CreateVolumeRequest createVolumeRequest = new CreateVolumeRequest();
    // 设置创建CDS磁盘的大小
    createVolumeRequest.setCdsSizeInGB(cdsSizeInGb);
    // 设置创建CDS磁盘的数量
    createVolumeRequest.setPurchaseCount(purchaseCount);

    CreateVolumeResponse createVolumeResponse = bccClient.createVolume(createVolumeRequest);

    System.out.println(createVolumeResponse.getVolumeIds());
}

// 从快照创建CDS磁盘
public static void createVolumeFromSnapshot(BccClient bccClient, String snapshotId) {
    CreateVolumeRequest createVolumeRequest = new CreateVolumeRequest();
    // 设置创建CDS磁盘的快照来源
    createVolumeRequest.setSnapshotId(snapshotId);
    // 设置创建CDS磁盘的数量
    createVolumeRequest.setPurchaseCount(purchaseCount);

    CreateVolumeResponse createVolumeResponse = bccClient.createVolume(createVolumeRequest);

    System.out.println(createVolumeResponse.getVolumeIds());
}

创建CDS磁盘接口为异步接口,可通过查询磁盘详情接口查询磁盘状态,详细接口使用请参考BCC API 文档查询磁盘详情

查询磁盘列表

以下代码可以查询所有的磁盘列表,不包含临时数据盘,支持分页查询以及通过次磁盘所挂载的BCC实例id进行过滤筛选:

public static void listVolumes(BccClient bccClient) {
    ListVolumesRequest listVolumesRequest = new ListVolumesRequest();
    // 设置分页标志
    listVolumesRequest.setMarker(volumeId);
    // 设置分页返回数据大小
    listVolumesRequest.setMaxKeys(maxKey);
    // 设置筛选的磁盘所挂载的实例Bcc实例id
    listVolumesRequest.setInstanceId(instanceId);

    ListVolumesResponse listVolumesResponse = bccClient.listVolumes(listVolumesRequest);

    for (VolumeModel volumeModel : listVolumesResponse.getVolumes()) {
        System.out.println(volumeModel.getId());
    }
}

查询磁盘详情

通过磁盘id可以获取对应磁盘的详细信息,以下代码可以查询磁盘详情:

public static void getVolumeDetail(BccClient bccClient) {
    // 设置磁盘id
    GetVolumeResponse volumeResponse = bccClient.getVolume(volumeId);
    System.out.println(volumeResponse.getVolume().getId());
}

挂载CDS磁盘

可以将未挂载的磁盘挂载在对应的BCC虚机下,以下代码将一个CDS挂载在对应的BCC虚机下:

public static void attachVolume(BccClient bccClient) {
    AttachVolumeRequest attachVolumeRequest = new AttachVolumeRequest();
    // 设置需要挂载的磁盘id
    attachVolumeRequest.setVolumeId(volumeId);
    // 设置BCC虚机id
    attachVolumeRequest.setInstanceId(instanceId);
    // 打印挂载路径
    System.out.println(bccClient.attachVolume(attachVolumeRequest).getVolumeAttachment().getDevice());
}
  • CDS磁盘需要挂载在与其处在相同zone下的虚机实例上,否则将返回403错误。
  • 只有磁盘状态为 Available 且实例状态为 Running 或 Stopped 时才允许挂载,否则调用此接口将返回 409 错误。

卸载CDS磁盘

可以将已挂载的磁盘从对应的BCC虚机上卸载下来,以下代码卸载CDS磁盘:

public static void detachVolume(BccClient bccClient) {
    DetachVolumeRequest detachVolumeRequest = new DetachVolumeRequest();
    // 设置待卸载的磁盘对应的ID
    detachVolumeRequest.setVolumeId(volumeId);
    // 设置所挂载的实例ID
    detachVolumeRequest.setInstanceId(instanceId);
    // 执行卸载操作
    bccClient.detachVolume(detachVolumeRequest);
}
  • 只有实例状态为 Running 或 Stopped 时,磁盘才可以执行此操作,否则将提示 409 错误。
  • 如果 volumeId 的磁盘不挂载在 instanceId 的实例上,该操作失败,提示 404 错误。

释放CDS磁盘

用于释放未挂载的CDS磁盘,可指定是否删除磁盘关联的快照,缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系:

public static void releaseVolume(BccClient bccClient) {

    ReleaseVolumeRequest releaseVolumeRequest = new ReleaseVolumeRequest();

    // 设置磁盘id

    releaseVolumeRequest.setVolumeId(volumeId);

    // 若要释放磁盘关联的快照,加入以下代码,参数有"on"和"off"

    // 若要删除磁盘关联的自动快照,将参数设为"on",否则默认为"off"

     releaseVolumeRequest.setAutoSnapshot("on");

    // 若要删除磁盘关联的手动快照,将参数设为"on",否则默认为"off"

     releaseVolumeRequest.setManualSnapshot("on");

     bccClient.releaseVolume(releaseVolumeRequest);

}
  • 已挂载的CDS磁盘不能释放,系统盘不能释放。
  • 磁盘释放后不可恢复。缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系。
  • 只有磁盘状态为 Available 或 Expired 或 Error 时才可以执行此操作,否则将提示 409 错误。

修改磁盘属性

可以使用以下代码修改指定磁盘名称、描述信息:

public static void modifyCdsAttribute(BccClient bccClient) {

    ModifyCdsAttributeRequest modifyCdsAttributeRequest = new ModifyCdsAttributeRequest();

    // 设置磁盘id

    modifyCdsAttributeRequest.setCdsId(volumeId);

    // 设置新的磁盘名称

     modifyCdsAttributeRequest.setCdsName(volumeName);

    // 设置磁盘新的描述

      modifyCdsAttributeRequest.setDesc(volumeDesc);

      bccClient.modifyCdsAttribute(modifyCdsAttributeRequest);

}

磁盘计费变更

可以使用以下代码变更磁盘计费方式,仅支持后付费转预付费、预付费转后付费两种方式。变更为预付费需要指定购买时长。

public static void modifyVolumeChargeType(BccClient bccClient) {

    ModifyVolumeChargeRequest modifyVolumeChargeRequest = new ModifyVolumeChargeRequest();

    // 设置磁盘id

    modifyVolumeChargeRequest.setVolumeId(volumeId);

    // 设置新的计费方式为预付费

     modifyVolumeChargeRequest.setBillingMethod("prepay");

    // 设置新的计费方式为后付费

     modifyVolumeChargeRequest.setBillingMethod("postpay");

    // 设置购买时长(月)

     modifyVolumeChargeRequest.setReservationLength(reservationLength);

     bccClient.modifyVolumeChargeType(modifyVolumeChargeRequest);

}

磁盘扩容

使用以下代码可以对磁盘进行扩大容量操作:

public static void resizeVolume(BccClient bccClient) {
    ResizeVolumeRequest resizeVolumeRequest = new ResizeVolumeRequest();
    // 设置磁盘id
    resizeVolumeRequest.setVolumeId(volumeId);
    // 设置磁盘扩容后总大小
    resizeVolumeRequest.setNewCdsSizeInGB(cdsResizeInGb);
    // 执行磁盘扩容
    bccClient.resizeVolume(resizeVolumeRequest);
}

磁盘只能进行扩大容量,不支持缩小容量。
只有Available状态的磁盘,才能进行扩容操作
磁盘扩容是一个异步接口,可通过查询磁盘详情接口查询磁盘扩容状态。

回滚磁盘

可以使用指定磁盘自身的快照回滚磁盘内容,使用以下代码可以对磁盘进行回滚:

public static void rollbackVolume(BccClient bccClient) {
    RollbackVolumeRequest rollbackVolumeRequest = new RollbackVolumeRequest();
    // 设置磁盘id
    rollbackVolumeRequest.setVolumeId(volumeId);
    // 设置磁盘的快照id
    rollbackVolumeRequest.setSnapshotId(snapshotId);
    // 执行回滚操作
    bccClient.rollbackVolume(rollbackVolumeRequest);
}
  • 磁盘状态必须为 Available 才可以执行回滚磁盘操作。
  • 指定快照id必须是由该磁盘id创建的快照。
  • 若是回滚系统盘,实例状态必须为 Running 或 Stopped 才可以执行此操作。
  • 回滚系统盘快照,自本次快照以来的系统盘数据将全部丢失,不可恢复。

磁盘续费

对磁盘的续费操作,可以延长过期时长,以下代码可以对磁盘进行续费:

public static void purchaseReservedVolume(BccClient bccClient) {
    PurchaseReservedVolumeRequest purchaseReservedVolumeRequest = new PurchaseReservedVolumeRequest();
    // 设置磁盘id
    purchaseReservedVolumeRequest.setVolumeId(volumeId);
    // 设置billing信息
    Billing billing = new Billing();
    // 设置续费时长,单位目前只支持'月'为单位
    billing.setReservation(new Reservation().withReservationLength(reservationLength));
    // 设置billing信息
    purchaseReservedVolumeRequest.setBilling(billing);
    // 执行续费磁盘操作
    bccClient.purchaseReservedVolume(purchaseReservedVolumeRequest);
}