~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/storage/config.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2015 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package storage
 
5
 
 
6
import (
 
7
        "github.com/juju/errors"
 
8
        "github.com/juju/schema"
 
9
)
 
10
 
 
11
const (
 
12
        // ConfigStorageDir is the path to the directory which a
 
13
        // machine-scoped storage source may use to contain storage
 
14
        // artifacts. This should not be used for environment-wide
 
15
        // storage sources, as the contents are bound to the
 
16
        // lifetime of the machine.
 
17
        //
 
18
        // ConfigStorageDir is set by the storage provisioner, so
 
19
        // should not be relied upon until a storage source is
 
20
        // constructed.
 
21
        ConfigStorageDir = "storage-dir"
 
22
)
 
23
 
 
24
// Config defines the configuration for a storage source.
 
25
type Config struct {
 
26
        name     string
 
27
        provider ProviderType
 
28
        attrs    map[string]interface{}
 
29
}
 
30
 
 
31
var fields = schema.Fields{}
 
32
 
 
33
var configChecker = schema.FieldMap(
 
34
        fields,
 
35
        schema.Defaults{},
 
36
)
 
37
 
 
38
// NewConfig creates a new Config for instantiating a storage source.
 
39
func NewConfig(name string, provider ProviderType, attrs map[string]interface{}) (*Config, error) {
 
40
        _, err := configChecker.Coerce(attrs, nil)
 
41
        if err != nil {
 
42
                return nil, errors.Annotate(err, "validating common storage config")
 
43
        }
 
44
        return &Config{
 
45
                name:     name,
 
46
                provider: provider,
 
47
                attrs:    attrs,
 
48
        }, nil
 
49
}
 
50
 
 
51
// Name returns the name of a storage source. This is not necessarily unique,
 
52
// and should only be used for informational purposes.
 
53
func (c *Config) Name() string {
 
54
        return c.name
 
55
}
 
56
 
 
57
// Provider returns the name of a storage provider.
 
58
func (c *Config) Provider() ProviderType {
 
59
        return c.provider
 
60
}
 
61
 
 
62
// Attrs returns the configuration attributes for a storage source.
 
63
func (c *Config) Attrs() map[string]interface{} {
 
64
        if c.attrs == nil {
 
65
                return nil
 
66
        }
 
67
        attrs := make(map[string]interface{})
 
68
        for k, v := range c.attrs {
 
69
                attrs[k] = v
 
70
        }
 
71
        return attrs
 
72
}
 
73
 
 
74
// ValueString returns the named config attribute as a string.
 
75
func (c *Config) ValueString(name string) (string, bool) {
 
76
        v, ok := c.attrs[name].(string)
 
77
        return v, ok
 
78
}