| OLD | NEW |
| 1 package ec2 | 1 package ec2 |
| 2 | 2 |
| 3 import ( | 3 import ( |
| 4 "fmt" | 4 "fmt" |
| 5 "io/ioutil" | 5 "io/ioutil" |
| 6 "launchpad.net/goamz/aws" | 6 "launchpad.net/goamz/aws" |
| 7 "launchpad.net/goamz/ec2" | 7 "launchpad.net/goamz/ec2" |
| 8 "launchpad.net/goamz/s3" | 8 "launchpad.net/goamz/s3" |
| 9 "launchpad.net/juju-core/environs" | 9 "launchpad.net/juju-core/environs" |
| 10 "launchpad.net/juju-core/environs/cloudinit" | 10 "launchpad.net/juju-core/environs/cloudinit" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 m := make(map[string]interface{}) | 116 m := make(map[string]interface{}) |
| 117 ecfg, err := providerInstance.newConfig(cfg) | 117 ecfg, err := providerInstance.newConfig(cfg) |
| 118 if err != nil { | 118 if err != nil { |
| 119 return nil, err | 119 return nil, err |
| 120 } | 120 } |
| 121 m["access-key"] = ecfg.accessKey() | 121 m["access-key"] = ecfg.accessKey() |
| 122 m["secret-key"] = ecfg.secretKey() | 122 m["secret-key"] = ecfg.secretKey() |
| 123 return m, nil | 123 return m, nil |
| 124 } | 124 } |
| 125 | 125 |
| 126 func (environProvider) publicAttrs(cfg *config.Config) (map[string]interface{},
error) { | |
| 127 m := make(map[string]interface{}) | |
| 128 ecfg, err := providerInstance.newConfig(cfg) | |
| 129 if err != nil { | |
| 130 return nil, err | |
| 131 } | |
| 132 for k, v := range ecfg.UnknownAttrs() { | |
| 133 m[k] = v | |
| 134 } | |
| 135 secret, err := providerInstance.SecretAttrs(cfg) | |
| 136 if err != nil { | |
| 137 return nil, err | |
| 138 } | |
| 139 for k, _ := range secret { | |
| 140 delete(m, k) | |
| 141 } | |
| 142 return m, nil | |
| 143 } | |
| 144 | |
| 145 func (environProvider) PublicAddress() (string, error) { | 126 func (environProvider) PublicAddress() (string, error) { |
| 146 return fetchMetadata("public-hostname") | 127 return fetchMetadata("public-hostname") |
| 147 } | 128 } |
| 148 | 129 |
| 149 func (environProvider) PrivateAddress() (string, error) { | 130 func (environProvider) PrivateAddress() (string, error) { |
| 150 return fetchMetadata("local-hostname") | 131 return fetchMetadata("local-hostname") |
| 151 } | 132 } |
| 152 | 133 |
| 153 func (e *environ) Config() *config.Config { | 134 func (e *environ) Config() *config.Config { |
| 154 return e.ecfg().Config | 135 return e.ecfg().Config |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 } | 214 } |
| 234 if _, notFound := err.(*environs.NotFoundError); !notFound { | 215 if _, notFound := err.(*environs.NotFoundError); !notFound { |
| 235 return fmt.Errorf("cannot query old bootstrap state: %v", err) | 216 return fmt.Errorf("cannot query old bootstrap state: %v", err) |
| 236 } | 217 } |
| 237 var tools *state.Tools | 218 var tools *state.Tools |
| 238 if uploadTools { | 219 if uploadTools { |
| 239 tools, err = environs.PutTools(e.Storage(), nil) | 220 tools, err = environs.PutTools(e.Storage(), nil) |
| 240 if err != nil { | 221 if err != nil { |
| 241 return fmt.Errorf("cannot upload tools: %v", err) | 222 return fmt.Errorf("cannot upload tools: %v", err) |
| 242 } | 223 } |
| 224 } else { |
| 225 flags := environs.HighestVersion|environs.CompatVersion |
| 226 tools, err = environs.FindTools(e, version.Current, flags) |
| 227 if err != nil { |
| 228 return fmt.Errorf("cannot find tools: %v", err) |
| 229 } |
| 243 } | 230 } |
| 244 | 231 » config, err := environs.BootstrapConfig(providerInstance, e.Config(), to
ols) |
| 245 » config, err := providerInstance.publicAttrs(e.Config()) | |
| 246 if err != nil { | 232 if err != nil { |
| 247 return fmt.Errorf("unable to determine inital configuration: %v"
, err) | 233 return fmt.Errorf("unable to determine inital configuration: %v"
, err) |
| 248 } | 234 } |
| 249 inst, err := e.startInstance(0, nil, tools, true, config) | 235 inst, err := e.startInstance(0, nil, tools, true, config) |
| 250 if err != nil { | 236 if err != nil { |
| 251 return fmt.Errorf("cannot start bootstrap instance: %v", err) | 237 return fmt.Errorf("cannot start bootstrap instance: %v", err) |
| 252 } | 238 } |
| 253 err = e.saveState(&bootstrapState{ | 239 err = e.saveState(&bootstrapState{ |
| 254 ZookeeperInstances: []string{inst.Id()}, | 240 ZookeeperInstances: []string{inst.Id()}, |
| 255 }) | 241 }) |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 // AssignmentPolicy for EC2 is to deploy units only on machines without other | 290 // AssignmentPolicy for EC2 is to deploy units only on machines without other |
| 305 // units already assigned, and to launch new machines as required. | 291 // units already assigned, and to launch new machines as required. |
| 306 func (e *environ) AssignmentPolicy() state.AssignmentPolicy { | 292 func (e *environ) AssignmentPolicy() state.AssignmentPolicy { |
| 307 return state.AssignUnused | 293 return state.AssignUnused |
| 308 } | 294 } |
| 309 | 295 |
| 310 func (e *environ) StartInstance(machineId int, info *state.Info, tools *state.To
ols) (environs.Instance, error) { | 296 func (e *environ) StartInstance(machineId int, info *state.Info, tools *state.To
ols) (environs.Instance, error) { |
| 311 return e.startInstance(machineId, info, tools, false, nil) | 297 return e.startInstance(machineId, info, tools, false, nil) |
| 312 } | 298 } |
| 313 | 299 |
| 314 func (e *environ) userData(machineId int, info *state.Info, tools *state.Tools,
master bool, config map[string]interface{}) ([]byte, error) { | 300 func (e *environ) userData(machineId int, info *state.Info, tools *state.Tools,
master bool, config *config.Config) ([]byte, error) { |
| 315 cfg := &cloudinit.MachineConfig{ | 301 cfg := &cloudinit.MachineConfig{ |
| 316 Provisioner: master, | 302 Provisioner: master, |
| 317 StateServer: master, | 303 StateServer: master, |
| 318 StateInfo: info, | 304 StateInfo: info, |
| 319 InstanceIdAccessor: "$(curl http://169.254.169.254/1.0/meta-data
/instance-id)", | 305 InstanceIdAccessor: "$(curl http://169.254.169.254/1.0/meta-data
/instance-id)", |
| 320 ProviderType: "ec2", | 306 ProviderType: "ec2", |
| 321 Tools: tools, | 307 Tools: tools, |
| 322 MachineId: machineId, | 308 MachineId: machineId, |
| 323 AuthorizedKeys: e.ecfg().AuthorizedKeys(), | 309 AuthorizedKeys: e.ecfg().AuthorizedKeys(), |
| 324 Config: config, | 310 Config: config, |
| 325 } | 311 } |
| 326 cloudcfg, err := cloudinit.New(cfg) | 312 cloudcfg, err := cloudinit.New(cfg) |
| 327 if err != nil { | 313 if err != nil { |
| 328 return nil, err | 314 return nil, err |
| 329 } | 315 } |
| 330 return cloudcfg.Render() | 316 return cloudcfg.Render() |
| 331 } | 317 } |
| 332 | 318 |
| 333 // startInstance is the internal version of StartInstance, used by Bootstrap | 319 // startInstance is the internal version of StartInstance, used by Bootstrap |
| 334 // as well as via StartInstance itself. If master is true, a bootstrap | 320 // as well as via StartInstance itself. If master is true, a bootstrap |
| 335 // instance will be started. | 321 // instance will be started. |
| 336 func (e *environ) startInstance(machineId int, info *state.Info, tools *state.To
ols, master bool, config map[string]interface{}) (environs.Instance, error) { | 322 func (e *environ) startInstance(machineId int, info *state.Info, tools *state.To
ols, master bool, config *config.Config) (environs.Instance, error) { |
| 337 if tools == nil { | 323 if tools == nil { |
| 338 var err error | 324 var err error |
| 339 » » tools, err = environs.FindTools(e, version.Current) | 325 » » flags := environs.HighestVersion|environs.CompatVersion |
| 326 » » tools, err = environs.FindTools(e, version.Current, flags) |
| 340 if err != nil { | 327 if err != nil { |
| 341 return nil, err | 328 return nil, err |
| 342 } | 329 } |
| 343 } | 330 } |
| 344 log.Printf("environs/ec2: starting machine %d in %q running tools versio
n %q from %q", machineId, e.name, tools.Binary, tools.URL) | 331 log.Printf("environs/ec2: starting machine %d in %q running tools versio
n %q from %q", machineId, e.name, tools.Binary, tools.URL) |
| 345 spec, err := findInstanceSpec(&instanceConstraint{ | 332 spec, err := findInstanceSpec(&instanceConstraint{ |
| 346 series: tools.Series, | 333 series: tools.Series, |
| 347 arch: tools.Arch, | 334 arch: tools.Arch, |
| 348 region: e.ecfg().region(), | 335 region: e.ecfg().region(), |
| 349 }) | 336 }) |
| (...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 } | 820 } |
| 834 var data []byte | 821 var data []byte |
| 835 data, err = ioutil.ReadAll(resp.Body) | 822 data, err = ioutil.ReadAll(resp.Body) |
| 836 if err != nil { | 823 if err != nil { |
| 837 continue | 824 continue |
| 838 } | 825 } |
| 839 return strings.TrimSpace(string(data)), nil | 826 return strings.TrimSpace(string(data)), nil |
| 840 } | 827 } |
| 841 return | 828 return |
| 842 } | 829 } |
| OLD | NEW |