func requestProperties()

in sharedlibraries/gce/metadataserver/metadataserver.go [186:233]


func requestProperties() (*CloudProperties, error) {
	body, err := get(cloudPropertiesURI, "recursive=true")
	if err != nil {
		return nil, fmt.Errorf("failed to get cloud properties from metadata server: %v", err)
	}
	resBodyJSON := &metadataServerResponse{}
	if err = json.Unmarshal(body, resBodyJSON); err != nil {
		return nil, fmt.Errorf("failed to unmarshal response body from metadata server: %v", err)
	}

	project := resBodyJSON.Project
	projectID := project.ProjectID
	numericProjectID := strconv.FormatInt(int64(project.NumericProjectID), 10)
	instance := resBodyJSON.Instance
	instanceID := strconv.FormatInt(int64(instance.ID), 10)
	zone := parseZone(instance.Zone)
	machineType := parseMachineType(instance.MachineType)
	instanceName := instance.Name
	image := instance.Image
	scopes := instance.ServiceAccounts.DefaultInfo.Scopes

	if image == "" {
		image = ImageUnknown
	}
	if machineType == "" {
		machineType = MachineTypeUnknown
	}

	log.Logger.Debugw("Default Cloud Properties from metadata server",
		"projectid", projectID, "projectnumber", numericProjectID, "instanceid", instanceID, "zone", zone, "instancename", instanceName, "image", image, "machinetype", machineType, "scopes", scopes)

	if projectID == "" || numericProjectID == "0" || instanceID == "0" || zone == "" || instanceName == "" {
		return nil, fmt.Errorf("metadata server responded with incomplete information")
	}
	region := regionFromZone(zone)

	return &CloudProperties{
		ProjectID:        projectID,
		NumericProjectID: numericProjectID,
		InstanceID:       instanceID,
		Zone:             zone,
		Region:           region,
		InstanceName:     instanceName,
		Image:            image,
		MachineType:      machineType,
		Scopes:           scopes,
	}, nil
}