Попытка получить доступ к облачным областям IBM за пределами США, но не удается из-за отсутствия доступа - PullRequest
0 голосов
/ 11 февраля 2019

Попытка использовать клиентскую библиотеку bluemix golang и «подключиться» к каждому региону в мире и получить наш идентификатор экземпляра bluemix для выдачи последующих запросов ресурсов.

Однако все, кроме us-south, возвращает неутешение.Я пытаюсь не использовать API Cloudfoundry, так как лучше всего дать моей организации возможность выдавать запросы ресурсов в разных регионах?Похоже, что страницы IAM не имеют региональной ассоциации, как у API Cloudfoundry.

1 Ответ

0 голосов
/ 25 февраля 2019

Эта структура команды кобры, кажется, решает проблему.

package cmd

import (
    "github.com/IBM-Cloud/bluemix-go"
    "github.com/IBM-Cloud/bluemix-go/authentication"
    "github.com/IBM-Cloud/bluemix-go/rest"
    "github.com/IBM-Cloud/bluemix-go/session"
    "github.com/davecgh/go-spew/spew"
    "github.com/spf13/cobra"
    "log"
    "os"
)

var (
    debugFlag bool
    region    string
)

// tokenCmd represents the token command
var tokenCmd = &cobra.Command{
    Use:   "token",
    Short: "Get an IBM Cloud IAM bearer token",
    Long:  `Generate an IAM token.`,
    Run:   tokenCmdExecute,
}

func init() {
    rootCmd.AddCommand(tokenCmd)

    // Cobra supports Persistent Flags which will work for this command
    // and all subcommands
    tokenCmd.PersistentFlags().BoolVarP(&debugFlag, "debug", "d", false, "Enable debug")
    tokenCmd.PersistentFlags().StringVarP(&region, "region", "r", "us-south", "IBM Cloud region to target")
}

func tokenCmdExecute(cmd *cobra.Command, args []string) {
    // get the API key from the environment
    apiKey := os.Getenv("BLUEMIX_API_KEY")
    if apiKey == "" {
        log.Fatal("No API key found: please specify a BLUEMIX_API_KEY environment variable containing the API key for your IBM Cloud account")
    }

    // create a session object that will generate an IAM token and cache it
    cfg := &bluemix.Config{
        BluemixAPIKey: apiKey,
        Region:        region,
        Debug:         debugFlag,
    }
    sess, err := session.New(cfg)
    if err != nil {
        log.Fatal(err)
    }

    iamClient, err := authentication.NewIAMAuthRepository(cfg, rest.NewClient())
    if err != nil {
        log.Fatal(err)
    }

    err = iamClient.AuthenticateAPIKey(sess.Config.BluemixAPIKey)
    if err != nil {
        log.Fatal(err)
    }

    log.Println(sess.Config.IAMAccessToken)
    spew.Dump(sess.Config)
}

Области являются одним из набора;SDK выполняет поиск, чтобы найти подходящие конечные точки, и набор, который он поддерживает, - это регионы, в которых существует IBM Cloud.

Проблема заключалась в том, что в моей первой попытке я использовал клиент mccp, и это облачный API-интерфейс для нескольких облачных сред, использующий другой протокол кэширования аутентификации и конечной точки.

...