Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(589)

Side by Side Diff: provider/local/environprovider.go

Issue 49640050: provider/local: always use filestorage on CLI
Patch Set: provider/local: always use filestorage on CLI Created 11 years, 2 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 Canonical Ltd. 1 // Copyright 2013 Canonical Ltd.
2 // Licensed under the AGPLv3, see LICENCE file for details. 2 // Licensed under the AGPLv3, see LICENCE file for details.
3 3
4 package local 4 package local
5 5
6 import ( 6 import (
7 "fmt" 7 "fmt"
8 "net" 8 "net"
9 "os" 9 "os"
10 "os/user"
10 "syscall" 11 "syscall"
11 12
12 "github.com/loggo/loggo" 13 "github.com/loggo/loggo"
13 14
14 "launchpad.net/juju-core/environs" 15 "launchpad.net/juju-core/environs"
15 "launchpad.net/juju-core/environs/config" 16 "launchpad.net/juju-core/environs/config"
16 "launchpad.net/juju-core/instance" 17 "launchpad.net/juju-core/instance"
17 "launchpad.net/juju-core/juju/osenv" 18 "launchpad.net/juju-core/juju/osenv"
18 "launchpad.net/juju-core/provider" 19 "launchpad.net/juju-core/provider"
19 "launchpad.net/juju-core/utils" 20 "launchpad.net/juju-core/utils"
20 "launchpad.net/juju-core/version" 21 "launchpad.net/juju-core/version"
21 ) 22 )
22 23
23 var logger = loggo.GetLogger("juju.provider.local") 24 var logger = loggo.GetLogger("juju.provider.local")
24 25
25 var _ environs.EnvironProvider = (*environProvider)(nil) 26 var _ environs.EnvironProvider = (*environProvider)(nil)
26 27
27 type environProvider struct{} 28 type environProvider struct{}
28 29
29 var providerInstance = &environProvider{} 30 var providerInstance = &environProvider{}
30 31
31 func init() { 32 func init() {
32 environs.RegisterProvider(provider.Local, providerInstance) 33 environs.RegisterProvider(provider.Local, providerInstance)
33 } 34 }
34 35
36 var userCurrent = user.Current
37
35 // Open implements environs.EnvironProvider.Open. 38 // Open implements environs.EnvironProvider.Open.
36 func (environProvider) Open(cfg *config.Config) (environs.Environ, error) { 39 func (environProvider) Open(cfg *config.Config) (environs.Environ, error) {
37 logger.Infof("opening environment %q", cfg.Name()) 40 logger.Infof("opening environment %q", cfg.Name())
38 if _, ok := cfg.AgentVersion(); !ok { 41 if _, ok := cfg.AgentVersion(); !ok {
39 newCfg, err := cfg.Apply(map[string]interface{}{ 42 newCfg, err := cfg.Apply(map[string]interface{}{
40 "agent-version": version.Current.Number.String(), 43 "agent-version": version.Current.Number.String(),
41 }) 44 })
42 if err != nil { 45 if err != nil {
43 return nil, err 46 return nil, err
44 } 47 }
(...skipping 20 matching lines...) Expand all
65 return nil, err 68 return nil, err
66 } 69 }
67 environ := &localEnviron{name: cfg.Name()} 70 environ := &localEnviron{name: cfg.Name()}
68 if err := environ.SetConfig(cfg); err != nil { 71 if err := environ.SetConfig(cfg); err != nil {
69 logger.Errorf("failure setting config: %v", err) 72 logger.Errorf("failure setting config: %v", err)
70 return nil, err 73 return nil, err
71 } 74 }
72 return environ, nil 75 return environ, nil
73 } 76 }
74 77
78 var detectAptProxies = utils.DetectAptProxies
79
75 // Prepare implements environs.EnvironProvider.Prepare. 80 // Prepare implements environs.EnvironProvider.Prepare.
76 func (p environProvider) Prepare(cfg *config.Config) (environs.Environ, error) { 81 func (p environProvider) Prepare(cfg *config.Config) (environs.Environ, error) {
82 // The user must not set bootstrap-ip; this is determined by the provide r,
83 // and its presence used to determine whether the environment has yet be en
84 // bootstrapped.
85 if _, ok := cfg.UnknownAttrs()["bootstrap-ip"]; ok {
86 return nil, fmt.Errorf("bootstrap-ip must not be specified")
87 }
77 err := checkLocalPort(cfg.StatePort(), "state port") 88 err := checkLocalPort(cfg.StatePort(), "state port")
78 if err != nil { 89 if err != nil {
79 return nil, err 90 return nil, err
80 } 91 }
81 err = checkLocalPort(cfg.APIPort(), "API port") 92 err = checkLocalPort(cfg.APIPort(), "API port")
82 if err != nil { 93 if err != nil {
83 return nil, err 94 return nil, err
84 } 95 }
85 // If the user has specified no values for any of the three normal 96 // If the user has specified no values for any of the three normal
86 // proxies, then look in the environment and set them. 97 // proxies, then look in the environment and set them.
87 attrs := make(map[string]interface{}) 98 attrs := make(map[string]interface{})
88 setIfNotBlank := func(key, value string) { 99 setIfNotBlank := func(key, value string) {
89 if value != "" { 100 if value != "" {
90 attrs[key] = value 101 attrs[key] = value
91 } 102 }
92 } 103 }
93 logger.Tracef("Look for proxies?") 104 logger.Tracef("Look for proxies?")
94 if cfg.HttpProxy() == "" && 105 if cfg.HttpProxy() == "" &&
95 cfg.HttpsProxy() == "" && 106 cfg.HttpsProxy() == "" &&
96 cfg.FtpProxy() == "" { 107 cfg.FtpProxy() == "" {
97 proxy := osenv.DetectProxies() 108 proxy := osenv.DetectProxies()
98 logger.Tracef("Proxies detected %#v", proxy) 109 logger.Tracef("Proxies detected %#v", proxy)
99 setIfNotBlank("http-proxy", proxy.Http) 110 setIfNotBlank("http-proxy", proxy.Http)
100 setIfNotBlank("https-proxy", proxy.Https) 111 setIfNotBlank("https-proxy", proxy.Https)
101 setIfNotBlank("ftp-proxy", proxy.Ftp) 112 setIfNotBlank("ftp-proxy", proxy.Ftp)
102 } 113 }
103 if cfg.AptHttpProxy() == "" && 114 if cfg.AptHttpProxy() == "" &&
104 cfg.AptHttpsProxy() == "" && 115 cfg.AptHttpsProxy() == "" &&
105 cfg.AptFtpProxy() == "" { 116 cfg.AptFtpProxy() == "" {
106 » » proxy, err := utils.DetectAptProxies() 117 » » proxy, err := detectAptProxies()
107 if err != nil { 118 if err != nil {
108 return nil, err 119 return nil, err
109 } 120 }
110 setIfNotBlank("apt-http-proxy", proxy.Http) 121 setIfNotBlank("apt-http-proxy", proxy.Http)
111 setIfNotBlank("apt-https-proxy", proxy.Https) 122 setIfNotBlank("apt-https-proxy", proxy.Https)
112 setIfNotBlank("apt-ftp-proxy", proxy.Ftp) 123 setIfNotBlank("apt-ftp-proxy", proxy.Ftp)
113 } 124 }
114 if len(attrs) > 0 { 125 if len(attrs) > 0 {
115 cfg, err = cfg.Apply(attrs) 126 cfg, err = cfg.Apply(attrs)
116 if err != nil { 127 if err != nil {
117 return nil, err 128 return nil, err
118 } 129 }
119 } 130 }
120 131
121 return p.Open(cfg) 132 return p.Open(cfg)
122 } 133 }
123 134
124 // checkLocalPort checks that the passed port is not used so far. 135 // checkLocalPort checks that the passed port is not used so far.
125 func checkLocalPort(port int, description string) error { 136 var checkLocalPort = func(port int, description string) error {
126 logger.Infof("checking %s", description) 137 logger.Infof("checking %s", description)
127 // Try to connect the port on localhost. 138 // Try to connect the port on localhost.
128 address := fmt.Sprintf("localhost:%d", port) 139 address := fmt.Sprintf("localhost:%d", port)
129 // TODO(mue) Add a timeout? 140 // TODO(mue) Add a timeout?
130 conn, err := net.Dial("tcp", address) 141 conn, err := net.Dial("tcp", address)
131 if err != nil { 142 if err != nil {
132 if nerr, ok := err.(*net.OpError); ok { 143 if nerr, ok := err.(*net.OpError); ok {
133 if nerr.Err == syscall.ECONNREFUSED { 144 if nerr.Err == syscall.ECONNREFUSED {
134 // No connection, so everything is fine. 145 // No connection, so everything is fine.
135 return nil 146 return nil
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 return getAddressForInterface("eth0") 267 return getAddressForInterface("eth0")
257 } 268 }
258 269
259 func (p environProvider) newConfig(cfg *config.Config) (*environConfig, error) { 270 func (p environProvider) newConfig(cfg *config.Config) (*environConfig, error) {
260 valid, err := p.Validate(cfg, nil) 271 valid, err := p.Validate(cfg, nil)
261 if err != nil { 272 if err != nil {
262 return nil, err 273 return nil, err
263 } 274 }
264 return newEnvironConfig(valid, valid.UnknownAttrs()), nil 275 return newEnvironConfig(valid, valid.UnknownAttrs()), nil
265 } 276 }
OLDNEW

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b