Skip to content

Instantly share code, notes, and snippets.

@ddtmachado
Created June 5, 2019 17:50
Show Gist options
  • Save ddtmachado/e9c00f249e9e6f6c9c169b966c52e806 to your computer and use it in GitHub Desktop.
Save ddtmachado/e9c00f249e9e6f6c9c169b966c52e806 to your computer and use it in GitHub Desktop.
Example for using Azure Service Bus through go with autorest
package main
import (
"flag"
"fmt"
"os"
"github.com/Azure/azure-sdk-for-go/arm/servicebus"
"github.com/Azure/go-autorest/autorest"
"github.com/Azure/go-autorest/autorest/adal"
"github.com/Azure/go-autorest/autorest/azure"
)
//AzureCredentials represents the account information needed to authenticate on Azure
type AzureCredentials struct {
TenantID string
ClientID string
ClientSecret string
SubscriptionID string
}
var azureCredentialsConfig AzureCredentials
var azureResourceGroup, azureNamespace string
func init() {
azureCredentialsConfig = AzureCredentials{
TenantID: os.Getenv("AZURE_TENANT_ID"),
ClientID: os.Getenv("AZURE_CLIENT_ID"),
ClientSecret: os.Getenv("AZURE_CLIENT_SECRET"),
SubscriptionID: os.Getenv("AZURE_SUBSCRIPTION_ID"),
}
//Command line args override the environment variables
flag.StringVar(&azureCredentialsConfig.ClientID, "clientID", "", "Define this client ID in azure Active Directory")
flag.StringVar(&azureCredentialsConfig.ClientSecret, "clientSecret", "", "Define this client Secret in azure Active Directory")
flag.StringVar(&azureCredentialsConfig.TenantID, "tenantID", "", "Define this client tenant ID in azure Active Directory")
flag.StringVar(&azureCredentialsConfig.SubscriptionID, "subscriptionID", "", "Define account subscription in azure")
flag.StringVar(&azureResourceGroup, "resourceGroup", "", "Define the resource group in azure")
flag.StringVar(&azureNamespace, "namespace", "", "Define the namespace in azure")
}
func main() {
flag.Parse()
oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, azureCredentialsConfig.TenantID)
onErrorFail(err, "OAuthConfigForTenant failed")
spToken, err := adal.NewServicePrincipalToken(*oauthConfig, azureCredentialsConfig.ClientID, azureCredentialsConfig.ClientSecret, azure.PublicCloud.ResourceManagerEndpoint)
onErrorFail(err, "NewServicePrincipalToken failed")
client := servicebus.NewTopicsClient(azureCredentialsConfig.SubscriptionID)
client.Authorizer = autorest.NewBearerAuthorizer(spToken)
fmt.Printf("Listing all topics on: %s - %s\n", azureResourceGroup, azureNamespace)
topics, err := client.ListAll(azureResourceGroup, azureNamespace)
onErrorFail(err, "Fail to get bus topics")
for _, topic := range *topics.Value {
fmt.Printf("%s\n", *topic.Name)
}
}
func onErrorFail(err error, message string) {
if err != nil {
fmt.Printf("%s: %s\n", message, err)
os.Exit(1)
}
}
func getEnvVarOrExit(varName string) string {
value := os.Getenv(varName)
if value == "" {
fmt.Printf("Missing environment variable %s\n", varName)
os.Exit(1)
}
return value
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment