in internal/apiclient/iam.go [418:461]
func GetComputeEngineDefaultServiceAccount(projectId string) (serviceAccount string, err error) {
getendpoint := fmt.Sprintf("https://cloudresourcemanager.googleapis.com/v3/projects/%s", projectId)
// Get the project number
ClientPrintHttpResponse.Set(false)
defer ClientPrintHttpResponse.Set(GetCmdPrintHttpResponseSetting())
respBody, err := HttpClient(getendpoint)
if err != nil {
clilog.Debug.Printf("error getting details for the project %s: %v", projectId, err)
return serviceAccount, err
}
type projectResponse struct {
Name string `json:"name,omitempty"`
Parent string `json:"parent,omitempty"`
ProjectId string `json:"projectId,omitempty"`
State string `json:"state,omitempty"`
DisplayName string `json:"displayName,omitempty"`
CreateTime string `json:"createTime,omitempty"`
UpdateTime string `json:"updateTime,omitempty"`
DeleteTime string `json:"deleteTime,omitempty"`
Etag string `json:"etag,omitempty"`
Labels map[string]string `json:"labels,omitempty"`
}
p := projectResponse{}
err = json.Unmarshal(respBody, &p)
if err != nil {
clilog.Debug.Println(err)
return serviceAccount, err
}
if p.Name == "" {
return serviceAccount, fmt.Errorf("project number was not available")
}
// get the project number
projectNumber := strings.Split(p.Name, "/")[1]
serviceAccount = fmt.Sprintf("%s-compute@developer.gserviceaccount.com", projectNumber)
return serviceAccount, nil
}