如何使用GoLang API在Azure中创建虚拟网络?

时间:2016-04-22 14:51:13

标签: azure go azure-virtual-network

目前我正在尝试使用GoLang代码创建虚拟网络:

client := network.NewVirtualNetworksClient(subscriptionID)
var parameters network.VirtualNetwork
c := make(<-chan struct{})

c1, err := client.CreateOrUpdate(resourceGroupName, virtualNetworkName, parameters, c)

utils.Info.Println(err.Error())
utils.Info.Println(c1)

但代码运行不正常。它抛出以下异常:

发送请求失败:StatusCode = 401 - 原始错误:长时间运行操作因状态“失败”而终止:代码=“AuthenticationFailed”消息=“验证失败。'授权'标头丢失。”

我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我假设您使用GoLang SDK for Azure?出错的原因是,当您发出请求时,它没有Authorization标头。授权标头是您可以从Azure Active Directory

获取的JSON Web标记

1)查看Fiddler中的请求,看看您的请求是否已对齐with the rules

2)继续阅读有关如何获取令牌的教程(12)。

答案 1 :(得分:1)

有一些很好的文档可以使用Azure身份验证,您可以在此处找到:azure-sdk-for-node/Documentation/Authentication

虽然目前还没有针对虚拟网络的示例,但您可以找到Azure SDK for Go samples here

对于Go,您可以更新客户端以使用身份验证令牌,因此您的代码将如下所示:

c := make(chan struct{})
authConfig, err0 := azure.PublicCloud.OAuthConfigForTenant(<yourTenantID>)
token, err1 := azure.NewServicePrincipalToken(
                  *authConfig,
                  <yourClientID>,
                  <yourClientSecret>,
                  azure.PublicCloud.ResourceManagerEndpoint) 

client := network.NewVirtualNetworkClient(subscriptionID)
client.Authorizer = token

var parameters network.VirtualNetwork
c1, err2 := client.CreateOrUpdate(resourceGroupName, virtualNetworkName, parameters, c)