package datasource import ( "io/ioutil" "os" "path" ) type configDrive struct { root string } func NewConfigDrive(root string) *configDrive { return &configDrive{path.Join(root, "openstack")} } func (cd *configDrive) IsAvailable() bool { _, err := os.Stat(cd.root) return !os.IsNotExist(err) } func (cd *configDrive) AvailabilityChanges() bool { return true } func (cd *configDrive) ConfigRoot() string { return cd.root } func (cd *configDrive) FetchMetadata() ([]byte, error) { return cd.readFile("meta_data.json") } func (cd *configDrive) FetchUserdata() ([]byte, error) { return cd.readFile("user_data") } func (cd *configDrive) Type() string { return "cloud-drive" } func (cd *configDrive) readFile(filename string) ([]byte, error) { data, err := ioutil.ReadFile(path.Join(cd.root, "latest", filename)) if os.IsNotExist(err) { err = nil } return data, err }