// Bootstrap is part of the Environ interface. func (e *manualEnviron) Bootstrap(ctx environs.BootstrapContext, args environs.BootstrapParams) (*environs.BootstrapResult, error) { provisioned, err := manualCheckProvisioned(e.host) if err != nil { return nil, errors.Annotate(err, "failed to check provisioned status") } if provisioned { return nil, manual.ErrProvisioned } hw, series, err := e.seriesAndHardwareCharacteristics() if err != nil { return nil, err } finalize := func(ctx environs.BootstrapContext, icfg *instancecfg.InstanceConfig, _ environs.BootstrapDialOpts) error { icfg.Bootstrap.BootstrapMachineInstanceId = BootstrapInstanceId icfg.Bootstrap.BootstrapMachineHardwareCharacteristics = hw if err := instancecfg.FinishInstanceConfig(icfg, e.Config()); err != nil { return err } return common.ConfigureMachine(ctx, ssh.DefaultClient, e.host, icfg) } result := &environs.BootstrapResult{ Arch: *hw.Arch, Series: series, Finalize: finalize, } return result, nil }
// Bootstrap is specified on the Environ interface. func (e *manualEnviron) Bootstrap(ctx environs.BootstrapContext, args environs.BootstrapParams) (*environs.BootstrapResult, error) { envConfig := e.envConfig() host := envConfig.bootstrapHost() provisioned, err := manualCheckProvisioned(host) if err != nil { return nil, errors.Annotate(err, "failed to check provisioned status") } if provisioned { return nil, manual.ErrProvisioned } hc, series, err := manualDetectSeriesAndHardwareCharacteristics(host) if err != nil { return nil, err } finalize := func(ctx environs.BootstrapContext, icfg *instancecfg.InstanceConfig) error { icfg.InstanceId = BootstrapInstanceId icfg.HardwareCharacteristics = &hc if err := instancecfg.FinishInstanceConfig(icfg, e.Config()); err != nil { return err } return common.ConfigureMachine(ctx, ssh.DefaultClient, host, icfg) } result := &environs.BootstrapResult{ Arch: *hc.Arch, Series: series, Finalize: finalize, } return result, nil }
func (e *manualEnviron) Bootstrap(ctx environs.BootstrapContext, args environs.BootstrapParams) (arch, series string, _ environs.BootstrapFinalizer, _ error) { // Set "use-sshstorage" to false, so agents know not to use sshstorage. cfg, err := e.Config().Apply(map[string]interface{}{"use-sshstorage": false}) if err != nil { return "", "", nil, err } if err := e.SetConfig(cfg); err != nil { return "", "", nil, err } agentEnv, err := localstorage.StoreConfig(e) if err != nil { return "", "", nil, err } envConfig := e.envConfig() // TODO(axw) consider how we can use placement to override bootstrap-host. host := envConfig.bootstrapHost() provisioned, err := manualCheckProvisioned(host) if err != nil { return "", "", nil, errors.Annotate(err, "failed to check provisioned status") } if provisioned { return "", "", nil, manual.ErrProvisioned } hc, series, err := manualDetectSeriesAndHardwareCharacteristics(host) if err != nil { return "", "", nil, err } finalize := func(ctx environs.BootstrapContext, icfg *instancecfg.InstanceConfig) error { icfg.InstanceId = BootstrapInstanceId icfg.HardwareCharacteristics = &hc if err := instancecfg.FinishInstanceConfig(icfg, e.Config()); err != nil { return err } for k, v := range agentEnv { icfg.AgentEnvironment[k] = v } return common.ConfigureMachine(ctx, ssh.DefaultClient, host, icfg) } return *hc.Arch, series, finalize, nil }