使用 Go
IBM® Storage Ceph® as a Service SDK for Go 提供可充分利用 IBM Storage Ceph as a Service 的特性。
IBM Storage Ceph as a Service SDK for GO 的功能非常全面,有很多特性和功能超出了本指南的範圍和篇幅。 如需詳細的類別和方法說明文件,請參閱 GO API 文件中的 Block Storage 和 Object Storage. 原始碼可在 GitHub 套件庫中找到。
取得 SDK
使用 go get 擷取 SDK,並將其新增至您的 GOPATH 工作區,或專案的 GO 模組相依性。 SDK 要求最低版本為 GO 1.21 或以上。 當我們的品質控制處理程序完成後,未來的 Go 版本將受到支援。 如需詳細資訊,請參閱 GO API 文件中的 Block Storage 和
Object Storage.
go get github.com/IBM/sds-go-sdk/v2/sdsaasv2
若要更新 SDK,請使用 go get -u 擷取最新版本的 SDK。
go get -u github.com/IBM/sds-go-sdk/v2/sdsaasv2
範例中提到的 SDK Go github 連結僅在 General Availability (GA) 之後才會生效。
匯入套件
安裝 SDK 後,匯入 GO 應用程式使用 SDK 所需的套件,如以下範例所示。
import (
"github.com/IBM/sds-go-sdk/v2/sdsaasv2"
)
開始使用程式碼範例之前
以下項目是建立或修改磁碟區或主機詳細資訊的必要項目:
- IBM Storage Ceph as a Service 部署實例
- 與部署相關的服務端點
- API 金鑰
程式碼範例
設定
var (
sdsaasService *sdsaasv2.SdsaasV2
)
func main() {
authenticator := &core.IamAuthenticator{
ApiKey: <apiKey>,
}
sdsaasServiceOptions := &sdsaasv2.SdsaasV2Options{
URL: <serviceEndpoint>,
Authenticator: authenticator,
}
sdsaasService, err := sdsaasv2.NewSdsaasV2(sdsaasServiceOptions)
if err != nil {
panic(err)
}
}
建立新卷冊
createVolumeOptions := sdsaasService.NewCreateVolumeOptions(
int64(5),
)
createVolumeOptions.SetName("my-volume")
volumeSummary, response, err := sdsaasService.CreateVolume(createVolumeOptions)
if err != nil {
panic(err)
}
列出可用的卷冊
listVolumesOptions := sdsaasService.NewListVolumesOptions()
listVolumesOptions.SetLimit(int64(10))
volumeCollection, response, err := sdsaasService.ListVolumes(listVolumesOptions)
if err != nil {
panic(err)
}
fmt.Println("Printing out a collection of volumes")
for _, volume := range volumeCollection.Volumes {
fmt.Println("Volume: ", *volume.Name, " Volume ID: ", *volume.ID)
}
更新卷冊
volumePatch := map[string]interface{}{
"name": "my-volume-updated",
}
updateVolumeOptions := sdsaasService.NewUpdateVolumeOptions(
*volume.ID,
)
volume, response, err := sdsaasService.UpdateVolume(updateVolumeOptions)
if err != nil {
panic(err)
}
取得容量詳細資料
volumeOptions := sdsaasService.NewGetVolumeOptions(
*volumeSummary.ID,
)
volume, response, err := sdsaasService.GetVolume(volumeOptions)
if err != nil {
panic(err)
}
fmt.Println("Printing out volume ", *volume.Name)
fmt.Println("Volume: ", *volume.Name, " Volume ID: ", *volume.ID)
刪除磁區
volumeDeleteOptions := sdsaasService.NewDeleteVolumeOptions(
*volume.ID,
)
response, err = sdsaasService.DeleteVolume(volumeDeleteOptions)
if err != nil {
panic(err)
}
建立磁區 Snapshot
sourceVolumeModel := &sdsaasv2.SourceVolume{
ID: core.StringPtr(*volume.ID),
}
volumeSnapshotCreateOptions := sdsaasService.NewCreateSnapshotOptions(
sourceVolumeModel,
)
snapshot, response, err := sdsaasService.CreateSnapshot(volumeSnapshotCreateOptions)
if err != nil {
panic(err)
}
列出所有磁碟區快照
listSnapshotsOptions := sdsaasService.NewListSnapshotsOptions()
pager, err := sdsaasService.NewSnapshotsPager(listSnapshotsOptions)
if err != nil {
panic(err)
}
var allResults []sdsaasv2.Snapshot
for pager.HasNext() {
nextPage, err := pager.GetNext()
if err != nil {
panic(err)
}
allResults = append(allResults, nextPage...)
}
b, _ := json.MarshalIndent(allResults, "", " ")
fmt.Println(string(b))
更新磁碟區快照
snapshotPatchModel := &sdsaasv2.SnapshotPatch{
Name: core.StringPtr("my-snapshot-updated"),
}
snapshotPatchModelAsPatch, asPatchErr := snapshotPatchModel.AsPatch()
if asPatchErr != nil {
panic(asPatchErr)
}
updateSnapshotOptions := sdsaasService.NewUpdateSnapshotOptions(
*snapshot.ID,
snapshotPatchModelAsPatch,
)
snapshot, response, err := sdsaasService.UpdateSnapshot(updateSnapshotOptions)
if err != nil {
panic(err)
}
列出磁碟區快照
getSnapshotOptions := sdsaasService.NewGetSnapshotOptions(
*snapshot.ID,
)
snapshot, _, err = sdsaasService.GetSnapshot(getSnapshotOptions)
if err != nil {
panic(err)
}
從快照還原磁碟區
volumeCreateOptions := sdsaasService.NewCreateVolumeOptions(
int64(10),
)
volumeCreateOptions.SetName("volume-restored-from-snapshot")
sourceSnapshot, err := sdsaasService.NewSourceSnapshot(*snapshot.ID)
if err != nil {
panic(err)
}
volumeCreateOptions.SetSourceSnapshot(sourceSnapshot)
volumeSummary, response, err := sdsaasService.CreateVolume(volumeCreateOptions)
if err != nil {
panic(err)
}
刪除磁碟區快照
deleteSnapshotOptions := sdsaasService.NewDeleteSnapshotOptions(
*snapshot.ID,
)
response, err := sdsaasService.DeleteSnapshot(deleteSnapshotOptions)
if err != nil {
panic(err)
}
建立主機
createHostOptions := sdsaasService.NewCreateHostOptions(
<hostNQN>,
)
createHostOptions.SetName("my-host")
hostSummary, response, err := sdsaasService.CreateHost(createHostOptions)
if err != nil {
panic(err)
}
清單主機
hostsOptions := sdsaasService.NewListHostsOptions()
hostsOptions.SetLimit(int64(10))
hostCollection, response, err := sdsaasService.ListHosts(hostsOptions)
if err != nil {
panic(err)
}
fmt.Println("Printing out a collection of hosts")
for _, host := range hostCollection.Hosts {
fmt.Println("Host: ", *host.Name, " Host ID: ", *host.ID)
}
更新主機
hostPatch := map[string]interface{}{
"name": "my-host-updated",
}
updateHostOptions := sdsaasService.NewUpdateHostOptions(
*hostSummary.ID,
hostPatch,
)
host, response, err := sdsaasService.UpdateHost(updateHostOptions)
if err != nil {
panic(err)
}
取得主機
hostOptions := sdsaasService.NewGetHostOptions(
*host.ID,
)
host, response, err := sdsaasService.GetHost(hostOptions)
if err != nil {
panic(err)
}
fmt.Println("Printing out host ", *host.Name)
fmt.Println("Host: ", *volume.Name, " Host ID: ", *host.ID)
將主機對應到磁碟區
volumeIdentityModel := &sdsaasv2.VolumeIdentity{
ID: volume.ID,
}
createVolumeMappingOptions := sdsaasService.NewCreateVolumeMappingOptions(
*host.ID,
volumeIdentityModel,
)
volumeMappingReference, response, err := sdsaasService.CreateVolumeMapping(createVolumeMappingOptions)
if err != nil {
panic(err)
}
fmt.Println("Host mapping created")
fmt.Println("Volume ID: ", *volumeMapping.Volume.ID)
fmt.Println("Host ID: ", *volumeMapping.Host.ID)
fmt.Println("Volume mapping ID: ", *volumeMapping.ID)
檢視所有主機對應
volumeMappingOptions := sdsaasService.NewListVolumeMappingsOptions(
*host.ID,
)
volumeMappingCollection, response, err := sdsaasService.ListVolumeMappings(volumeMappingOptions)
if err != nil {
panic(err)
}
fmt.Println("Printing out a collection of host mappings")
for _, mapping := range volumeMappingCollection.VolumeMappings {
fmt.Println("Host ID: ", *mapping.Host.ID)
fmt.Println("Volume ID: ", *mapping.Volume.ID)
fmt.Println("Volume mapping ID: ", *mapping.ID)
fmt.Println()
}
檢視特定主機對應
getVolumeMappingOptions := sdsaasService.NewGetVolumeMappingOptions(
*host.ID,
<VOLUME-MAPPING-ID>,
)
volumeMapping, response, err := sdsaasService.HostMapping(getVolumeMappingOptions)
if err != nil {
panic(err)
}
fmt.Println("Host mapping")
fmt.Println("Volume ID: ", *volumeMapping.Volume.ID)
fmt.Println("Host ID: ", *volumeMapping.Host.ID)
fmt.Println("Volume mapping ID: ", *volumeMapping.ID)
從磁碟區解除對應主機
hostMappingDeleteOptions := sdsaasService.NewHostMappingDeleteOptions(
*host.ID,
<VOLUME-MAPPING-ID>,
)
response, err := sdsaasService.HostMappingDelete(hostMappingDeleteOptions)
if err != nil {
panic(err)
}
從主機解除所有映射
hostMappingDeleteAllOptions := sdsaasService.NewHostMappingDeleteAllOptions(
*host.ID,
)
_, err = sdsaasService.HostMappingDeleteAll(hostMappingDeleteAllOptions)
if err != nil {
panic(err)
}
刪除主機
hostDeleteOptions := sdsaasService.NewDeleteHostOptions(
*host.ID,
)
_, err = sdsaasService.DeleteHost(hostDeleteOptions)
if err != nil {
panic(err)
}
建立掛載目標
cidrClientTypeModel := &sdsaasv2.CIDRClientType{
CIDR: []string{"192.168.3.0/24"},
}
createMountTargetOptions := sdsaasService.NewCreateMountTargetOptions(
*share.ID,
"mountTargetName",
cidrClientTypeModel,
)
mountTarget, response, err := sdsaasService.CreateMountTarget(createMountTargetOptions)
if err != nil {
panic(err)
}
掛載目標清單
listMountTargetsOptions := &sdsaasv2.ListMountTargetsOptions{
ShareID: *share.ID,
}
listMountTargetsOptions.Start = nil
listMountTargetsOptions.Limit = core.Int64Ptr(1)
var allResults []sdsaasv2.MountTarget
for {
mountTargetCollection, response, err := sdsaasService.ListMountTargets(listMountTargetsOptions)
Expect(err).To(BeNil())
Expect(response.StatusCode).To(Equal(200))
Expect(mountTargetCollection).ToNot(BeNil())
allResults = append(allResults, mountTargetCollection.MountTargets...)
listMountTargetsOptions.Start, err = mountTargetCollection.GetNextStart()
Expect(err).To(BeNil())
if listMountTargetsOptions.Start == nil {
break
}
}
fmt.Println("All mount-targest: ", allResults)
掛載目標清單
getMountTargetOptions := &sdsaasv2.GetMountTargetOptions{
ShareID: *share.ID,
MountID: *mount.ID,
}
mountTarget, response, err := sdsaasService.GetMountTarget(getMountTargetOptions)
安裝目標更新
cidrClientTypeModel := &sdsaasv2.CIDRClientType{
CIDR: []string{"192.168.3.0/24"},
}
mountTargetPatchModel := &sdsaasv2.MountTargetPatch{
Name: core.StringPtr("mountTargetNameUpdated"),
Clients: cidrClientTypeModel,
}
mountTargetPatchModelAsPatch, asPatchErr := mountTargetPatchModel.AsPatch()
updateMountTargetOptions := &sdsaasv2.UpdateMountTargetOptions{
ShareID: *share.ID,
MountID: *mountTarget.ID,
MountTargetPatch: mountTargetPatchModelAsPatch,
}
mountTarget, response, err := sdsaasService.UpdateMountTarget(updateMountTargetOptions)
刪除掛載目標
deleteMountTargetOptions := &sdsaasv2.DeleteMountTargetOptions{
ShareID: *share.ID,
MountID: *mountTarget.ID,
}
response, err := sdsaasService.DeleteMountTarget(deleteMountTargetOptions)
建立卷組
volume1Model := &sdsaasv2.Volume1{
ID: *volume.ID,
}
createVolumeGroupOptions := &sdsaasv2.CreateVolumeGroupOptions{
Name: core.StringPtr("my-volume-group"),
Volumes: []sdsaasv2.Volume1{*volume1Model},
}
volumeGroup, response, err := sdsaasService.CreateVolumeGroup(createVolumeGroupOptions)
卷組清單
listVolumeGroupsOptions := &sdsaasv2.ListVolumeGroupsOptions{
Start: *volumeGroup.ID,
}
listVolumeGroupsOptions.Start = nil
listVolumeGroupsOptions.Limit = core.Int64Ptr(1)
var allResults []sdsaasv2.VolumeGroup
for {
volumeGroupCollection, response, err := sdsaasService.ListVolumeGroups(listVolumeGroupsOptions)
allResults = append(allResults, volumeGroupCollection.VolumeGroups...)
listVolumeGroupsOptions.Start, err = volumeGroupCollection.GetNextStart()
if listVolumeGroupsOptions.Start == nil {
break
}
}
fmt.Println("All volumeGroups: ", allResults)
卷組清單
getVolumeGroupOptions := &sdsaasv2.GetVolumeGroupOptions{
VolumeGroupID: *volumeGroup.ID,
}
volumeGroup, response, err := sdsaasService.GetVolumeGroup(getVolumeGroupOptions)
卷組更新
volumeGroupPatchModel := &sdsaasv2.VolumeGroupPatch{
Name: core.StringPtr("my-volume-group"),
}
volumeGroupPatchModelAsPatch, asPatchErr := volumeGroupPatchModel.AsPatch()
updateVolumeGroupOptions := &sdsaasv2.UpdateVolumeGroupOptions{
VolumeGroupID: *volumeGroup.ID,
VolumeGroupPatch: volumeGroupPatchModelAsPatch,
}
volumeGroup, response, err := sdsaasService.UpdateVolumeGroup(updateVolumeGroupOptions)
音量群組新增音量
createVolumeInVolumeGroupOptions := &sdsaasv2.CreateVolumeInVolumeGroupOptions{
VolumeGroupID: *volumeGroup.ID,
VolumeID: *volume.ID,
}
volumeGroup, response, err := sdsaasService.CreateVolumeInVolumeGroup(createVolumeInVolumeGroupOptions)
磁碟區群組刪除磁碟區
deleteVolumeFromVolumeGroupOptions := &sdsaasv2.DeleteVolumeFromVolumeGroupOptions{
VolumeGroupID: *volumeGroup.ID,
VolumeID: *volume.ID,
}
response, err := sdsaasService.DeleteVolumeFromVolumeGroup(deleteVolumeFromVolumeGroupOptions)
刪除卷組
deleteVolumeGroupOptions := &sdsaasv2.DeleteVolumeGroupOptions{
VolumeGroupID: volumeGroup.ID,
}
response, err := sdsaasService.DeleteVolumeGroup(deleteVolumeGroupOptions)
建立憑證
createHmacCredentialsOptions := sdsaasService.NewCreateHmacCredentialsOptions(
"test-key",
)
accessKeyResponse, response, err := sdsaasService.CreateHmacCredentials(createHmacCredentialsOptions)
if err != nil {
panic(err)
}
證書清單
listHmacCredentialsOptions := sdsaasService.NewListHmacCredentialsOptions()
storageCredResponse, response, err := sdsaasService.ListHmacCredentials(listHmacCredentialsOptions)
if err != nil {
panic(err)
}
憑證刪除
deleteHmacCredentialsOptions := sdsaasService.NewDeleteHmacCredentialsOptions(
"test-key",
)
response, err := sdsaasService.DeleteHmacCredentials(deleteHmacCredentialsOptions)
if err != nil {
panic(err)
}
證書清單
listCertificatesOptions := sdsaasService.NewListCertificatesOptions()
certListResponse, response, err := sdsaasService.ListCertificates(listCertificatesOptions)
if err != nil {
panic(err)
}
建立證書
createSslCertOptions := sdsaasService.NewCreateSslCertOptions(
"s3",
)
certResponse, response, err := sdsaasService.CreateSslCert(createSslCertOptions)
if err != nil {
panic(err)
}
證書清單
getS3SslCertStatusOptions := sdsaasService.NewGetS3SslCertStatusOptions(
"s3",
)
statusResponse, response, err := sdsaasService.GetS3SslCertStatus(getS3SslCertStatusOptions)
if err != nil {
panic(err)
}
憑證更新/更換
replaceSslCertOptions := sdsaasService.NewReplaceSslCertOptions(
"s3",
)
certResponse, response, err := sdsaasService.ReplaceSslCert(replaceSslCertOptions)
if err != nil {
panic(err)
}
憑證刪除
deleteSslCertOptions := sdsaasService.NewDeleteSslCertOptions(
"s3",
)
response, err := sdsaasService.DeleteSslCert(deleteSslCertOptions)
if err != nil {
panic(err)
}
後續步驟
如果您還沒有參閱詳細的類別和方法說明文件,請參閱 GO API 文件中的 Block Storage 和 Object Storage.