~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/provider/lxd/provider.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
// +build go1.3
 
5
 
 
6
package lxd
 
7
 
 
8
import (
 
9
        "github.com/juju/errors"
 
10
        "gopkg.in/juju/environschema.v1"
 
11
 
 
12
        "github.com/juju/juju/cloud"
 
13
        "github.com/juju/juju/environs"
 
14
        "github.com/juju/juju/environs/config"
 
15
        "github.com/juju/juju/provider/lxd/lxdnames"
 
16
)
 
17
 
 
18
type environProvider struct {
 
19
        environProviderCredentials
 
20
}
 
21
 
 
22
var providerInstance environProvider
 
23
 
 
24
// Open implements environs.EnvironProvider.
 
25
func (environProvider) Open(args environs.OpenParams) (environs.Environ, error) {
 
26
        // TODO(ericsnow) verify prerequisites (see provider/local/prereq.go)?
 
27
        // TODO(ericsnow) do something similar to correctLocalhostURLs()
 
28
        // (in provider/local/environprovider.go)?
 
29
 
 
30
        env, err := newEnviron(args.Config, newRawProvider)
 
31
        return env, errors.Trace(err)
 
32
}
 
33
 
 
34
// PrepareConfig implements environs.EnvironProvider.
 
35
func (p environProvider) PrepareConfig(args environs.PrepareConfigParams) (*config.Config, error) {
 
36
        return args.Config, nil
 
37
}
 
38
 
 
39
// RestrictedConfigAttributes is specified in the EnvironProvider interface.
 
40
func (environProvider) RestrictedConfigAttributes() []string {
 
41
        return []string{
 
42
                "remote-url",
 
43
                "client-cert",
 
44
                "client-key",
 
45
                "server-cert",
 
46
        }
 
47
}
 
48
 
 
49
// Validate implements environs.EnvironProvider.
 
50
func (environProvider) Validate(cfg, old *config.Config) (valid *config.Config, err error) {
 
51
        if old == nil {
 
52
                ecfg, err := newValidConfig(cfg, configDefaults)
 
53
                if err != nil {
 
54
                        return nil, errors.Annotate(err, "invalid config")
 
55
                }
 
56
                return ecfg.Config, nil
 
57
        }
 
58
 
 
59
        // The defaults should be set already, so we pass nil.
 
60
        ecfg, err := newValidConfig(old, nil)
 
61
        if err != nil {
 
62
                return nil, errors.Annotate(err, "invalid base config")
 
63
        }
 
64
 
 
65
        if err := ecfg.update(cfg); err != nil {
 
66
                return nil, errors.Annotate(err, "invalid config change")
 
67
        }
 
68
 
 
69
        return ecfg.Config, nil
 
70
}
 
71
 
 
72
// SecretAttrs implements environs.EnvironProvider.
 
73
func (environProvider) SecretAttrs(cfg *config.Config) (map[string]string, error) {
 
74
        // The defaults should be set already, so we pass nil.
 
75
        ecfg, err := newValidConfig(cfg, nil)
 
76
        if err != nil {
 
77
                return nil, errors.Trace(err)
 
78
        }
 
79
        return ecfg.secret(), nil
 
80
}
 
81
 
 
82
// DetectRegions implements environs.CloudRegionDetector.
 
83
func (environProvider) DetectRegions() ([]cloud.Region, error) {
 
84
        // For now we just return a hard-coded "localhost" region,
 
85
        // i.e. the local LXD daemon. We may later want to detect
 
86
        // locally-configured remotes.
 
87
        return []cloud.Region{{Name: lxdnames.DefaultRegion}}, nil
 
88
}
 
89
 
 
90
// Schema returns the configuration schema for an environment.
 
91
func (environProvider) Schema() environschema.Fields {
 
92
        fields, err := config.Schema(configSchema)
 
93
        if err != nil {
 
94
                panic(err)
 
95
        }
 
96
        return fields
 
97
}