blob: 4514e52b0322bbdf0c150fefae4ec14d4d6daf93 [file] [log] [blame]
// Copyright 2016 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package gomaasapi
import "github.com/juju/schema"
type filesystem struct {
fstype string
mountPoint string
label string
uuid string
// no idea what the mount_options are as a value type, so ignoring for now.
}
// Type implements FileSystem.
func (f *filesystem) Type() string {
return f.fstype
}
// MountPoint implements FileSystem.
func (f *filesystem) MountPoint() string {
return f.mountPoint
}
// Label implements FileSystem.
func (f *filesystem) Label() string {
return f.label
}
// UUID implements FileSystem.
func (f *filesystem) UUID() string {
return f.uuid
}
// There is no need for controller based parsing of filesystems until we need it.
// Currently the filesystem reading is only called by the Partition parsing.
func filesystem2_0(source map[string]interface{}) (*filesystem, error) {
fields := schema.Fields{
"fstype": schema.String(),
"mount_point": schema.OneOf(schema.Nil(""), schema.String()),
"label": schema.OneOf(schema.Nil(""), schema.String()),
"uuid": schema.String(),
// TODO: mount_options when we know the type (note it can be
// nil).
}
defaults := schema.Defaults{
"mount_point": "",
"label": "",
}
checker := schema.FieldMap(fields, defaults)
coerced, err := checker.Coerce(source, nil)
if err != nil {
return nil, WrapWithDeserializationError(err, "filesystem 2.0 schema check failed")
}
valid := coerced.(map[string]interface{})
// From here we know that the map returned from the schema coercion
// contains fields of the right type.
mount_point, _ := valid["mount_point"].(string)
label, _ := valid["label"].(string)
result := &filesystem{
fstype: valid["fstype"].(string),
mountPoint: mount_point,
label: label,
uuid: valid["uuid"].(string),
}
return result, nil
}