in gce-containers-startup/volumes/volumes.go [363:395]
func (env Env) buildDiskMetadataReadOnlyMap() (map[string]bool, error) {
diskMetadataReadOnlyMap := map[string]bool{}
diskMetadataJson, err := env.MetadataProvider.RetrieveDisksMetadataAsJson()
if err != nil {
return nil, fmt.Errorf("Failed to retrieve disk metadata: %s", err)
}
var parsedMetadata []struct {
// Note: there are other fields in the list, but they're irrelevant for our purpose.
DeviceName string
Mode string
}
err = json.Unmarshal(diskMetadataJson, &parsedMetadata)
if err != nil {
return nil, fmt.Errorf("Failed to unmarshal disk metadata JSON: %s", err)
}
for _, entry := range parsedMetadata {
if entry.DeviceName == "" {
return nil, fmt.Errorf("Received empty device name in the metadata: %+v", parsedMetadata)
}
switch entry.Mode {
case "READ_WRITE":
diskMetadataReadOnlyMap[entry.DeviceName] = false
case "READ_ONLY":
diskMetadataReadOnlyMap[entry.DeviceName] = true
default:
return nil, fmt.Errorf("Received unknown device mode from metadata for device %s: %s", entry.DeviceName, entry.Mode)
}
}
return diskMetadataReadOnlyMap, nil
}