in gcloud/cloudbilling.go [74:112]
func (c *Client) BillingAccountAttach(project, account string) error {
retries := 10
svc, err := c.getCloudbillingService()
if err != nil {
return err
}
ba := fmt.Sprintf("billingAccounts/%s", account)
proj := fmt.Sprintf("projects/%s", project)
cfg := cloudbilling.ProjectBillingInfo{
BillingAccountName: ba,
}
var looperr error
for i := 0; i < retries; i++ {
_, looperr = svc.Projects.UpdateBillingInfo(proj, &cfg).Do()
if looperr == nil {
return nil
}
if strings.Contains(looperr.Error(), "User is not authorized to get billing info") {
continue
}
}
if strings.Contains(looperr.Error(), "Request contains an invalid argument") {
return ErrorBillingInvalidAccount
}
if strings.Contains(looperr.Error(), "Not a valid billing account") {
return ErrorBillingInvalidAccount
}
if strings.Contains(looperr.Error(), "The caller does not have permission") {
return ErrorBillingNoPermission
}
return looperr
}