• 沒有找到結果。

2.4 Go

2.4.2 Go SDK 使用

-Password IAM用户密码。

-ProjectID 项目ID。如何获取,请参考如 何获取IAM 用户名、账号ID 以及项目ID?。

-DomainID 账号ID。如何获取,请参考如

何获取IAM 用户名、账号ID 以及项目ID?。

-2.4.2 Go SDK 使用

2.4.2.1 Go SDK 认证方式

Go SDK支持token认证和AK/SK认证两种方式。

token 认证

token认证方式示例代码,参数详情请参考表2-20。

package main import (

"github.com/gophercloud/gophercloud/auth/token"

"github.com/gophercloud/gophercloud"

"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"

"github.com/gophercloud/gophercloud/openstack"

"fmt"

)

func main() { //设置认证参数

tokenOpts := token.TokenOptions{

IdentityEndpoint: "https://iam.example.com/v3", Username: "{username}",

Password: "{password}", DomainID: "{domainid}", ProjectID: "{projectid}", }

//初始化provider client

provider, providerErr := openstack.AuthenticatedClient(tokenOpts) if providerErr != nil {

fmt.Println("init provider client error:", providerErr) panic(providerErr)

}

//初始化service client

sc, serviceErr := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{}) if serviceErr != nil {

fmt.Println("init compute service client error:", serviceErr) panic(serviceErr)

}

//列出所有服务器

allPages, err := servers.List(sc, servers.ListOpts{}).AllPages() if err != nil {

fmt.Println("request server list error:", err) panic(err)

}

//解析返回值

allServers, err := servers.ExtractServers(allPages) if err != nil {

fmt.Println("extract response data error:", err) if ue, ok := err.(*gophercloud.UnifiedError); ok { fmt.Println("ErrCode:", ue.ErrorCode()) fmt.Println("Message:", ue.Message()) }

return }

//打印信息

fmt.Println("List Servers:") for _, s := range allServers { fmt.Println("server ID is :", s.ID) fmt.Println("server name is :", s.Name) fmt.Println("server Status is :", s.Status)

fmt.Println("server AvailbiltyZone is :", s.AvailbiltyZone) }

}

● ProviderClient 是所有 OpenStack 服务需要的顶级客户端。该客户端包含所有认 证详情,如URL及token ID,通过认证后,编写的Go代码就可访问API。

● 访问某个服务时,还需要该服务的Service Client,详见各服务对应的章节。

2-20 参数说明

名称 说明 取值样例

IdentityEnd

point 认证服务(IAM)的

Endpoint。

“https://

iam.example.com/v3”中的

“example”为“区域.云平台 域名”,参数详情可以访问这 里了解。

https://iam.cn-north-1.myhuaweicloud.com/v3

Username IAM用户名。如何获取,请参

考如何获取IAM 用户名、账 号ID以及项目ID?。

-Password IAM用户密码。

-ProjectID 项目ID。如何获取,请参考如 何获取IAM 用户名、账号ID 以及项目ID?。

-DomainID 账号ID。如何获取,请参考如

何获取IAM 用户名、账号ID 以及项目ID?。

-AKSK 认证

AK/SK认证方式示例代码,参数详情请参考表2-21。

package main import (

"github.com/gophercloud/gophercloud/auth/aksk"

"github.com/gophercloud/gophercloud"

"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"

"github.com/gophercloud/gophercloud/openstack"

"fmt"

)

func main() { //设置认证参数

akskOpts := aksk.AKSKOptions{

IdentityEndpoint: "https://iam.example.com/v3", DomainID: "{domainid}",

provider, providerErr := openstack.AuthenticatedClient(akskOpts) if providerErr != nil {

fmt.Println("init provider client error:", providerErr) panic(providerErr)

}

//初始化service client

sc, serviceErr := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{}) if serviceErr != nil {

fmt.Println("init compute service client error:", serviceErr) panic(serviceErr)

}

//列出所有服务器

allPages, err := servers.List(sc, servers.ListOpts{}).AllPages() if err != nil {

fmt.Println("request server list error:", err) panic(err)

}

//解析返回值

allServers, err := servers.ExtractServers(allPages) if err != nil {

fmt.Println("extract response data error:", err) if ue, ok := err.(*gophercloud.UnifiedError); ok {

fmt.Println("List Servers:") for _, s := range allServers { fmt.Println("server ID is :", s.ID) fmt.Println("server name is :", s.Name) fmt.Println("server Status is :", s.Status)

fmt.Println("server AvailbiltyZone is :", s.AvailbiltyZone) }

}

AK/SK生成说明:登录控制台,进入“我的凭证”,点击“管理访问密钥”创建 AK/SK。

AKSK签名时间与UTC时间误差不可以超过15分钟,否则会鉴权失败。

AKSK签名连续失败超过5次,将锁定对应访问的源IP的AKSK请求,持续5分钟。

2-21 参数说明

名称 说明 取值样例

IdentityEndp

oint 认证服务(IAM)的

Endpoint。

“https://

iam.example.com/v3”中的

“example”为“区域.云平 台域名”,参数详情可以访 问这里了解。

https://iam.cn-north-1.myhuaweicloud.com/v3

DomainID 账号ID。如何获取账号ID请 参考如何获取IAM 用户名、

账号ID以及项目ID?。

-ProjectID 项目ID。如何获取项目ID请 参考如何获取IAM 用户名、

账号ID以及项目ID?。

-ak/sk AK/SK访问密钥。

说明

● AK/SK生成说明:登录控制 台,进入“我的凭证”,点 击“管理访问密钥”创建 AK/SK。

● AK/SK签名时间与UTC时间 误差不可以超过15分钟,否 则会鉴权失败。

● AK/SK签名连续失败超过5 次,将锁定对应访问的源IP 的AKSK请求,持续5分钟。

-Region 区域名称。 cn-north-1

Cloud 云平台域名。 myhuaweicloud.com

2.4.2.2 Go SDK 故障排查

Go SDK打开debug的方法:

import (

"github.com/gophercloud/gophercloud"

)gophercloud.EnableDebug=true

相關文件