本文整理汇总了Golang中github.com/juju/juju/cloudconfig/instancecfg.FinishInstanceConfig函数的典型用法代码示例。如果您正苦于以下问题:Golang FinishInstanceConfig函数的具体用法?Golang FinishInstanceConfig怎么用?Golang FinishInstanceConfig使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了FinishInstanceConfig函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Bootstrap
// 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
}
示例2: getCloudConfig
func (s *configureSuite) getCloudConfig(c *gc.C, stateServer bool, vers version.Binary) cloudinit.CloudConfig {
var icfg *instancecfg.InstanceConfig
var err error
if stateServer {
icfg, err = instancecfg.NewBootstrapInstanceConfig(constraints.Value{}, vers.Series)
c.Assert(err, jc.ErrorIsNil)
icfg.InstanceId = "instance-id"
icfg.Jobs = []multiwatcher.MachineJob{multiwatcher.JobManageEnviron, multiwatcher.JobHostUnits}
} else {
icfg, err = instancecfg.NewInstanceConfig("0", "ya", imagemetadata.ReleasedStream, vers.Series, true, nil, nil, nil)
c.Assert(err, jc.ErrorIsNil)
icfg.Jobs = []multiwatcher.MachineJob{multiwatcher.JobHostUnits}
}
icfg.Tools = &tools.Tools{
Version: vers,
URL: "http://testing.invalid/tools.tar.gz",
}
environConfig := testConfig(c, stateServer, vers)
err = instancecfg.FinishInstanceConfig(icfg, environConfig)
c.Assert(err, jc.ErrorIsNil)
cloudcfg, err := cloudinit.New(icfg.Series)
c.Assert(err, jc.ErrorIsNil)
udata, err := cloudconfig.NewUserdataConfig(icfg, cloudcfg)
c.Assert(err, jc.ErrorIsNil)
err = udata.Configure()
c.Assert(err, jc.ErrorIsNil)
return cloudcfg
}
示例3: StartInstance
// StartInstance is specified in the InstanceBroker interface.
func (env *localEnviron) StartInstance(args environs.StartInstanceParams) (*environs.StartInstanceResult, error) {
if args.InstanceConfig.HasNetworks() {
return nil, fmt.Errorf("starting instances with networks is not supported yet.")
}
series := args.Tools.OneSeries()
logger.Debugf("StartInstance: %q, %s", args.InstanceConfig.MachineId, series)
args.InstanceConfig.Tools = args.Tools[0]
args.InstanceConfig.MachineContainerType = env.config.container()
logger.Debugf("tools: %#v", args.InstanceConfig.Tools)
if err := instancecfg.FinishInstanceConfig(args.InstanceConfig, env.config.Config); err != nil {
return nil, err
}
// TODO: evaluate the impact of setting the constraints on the
// instanceConfig for all machines rather than just state server nodes.
// This limitation is why the constraints are assigned directly here.
args.InstanceConfig.Constraints = args.Constraints
args.InstanceConfig.AgentEnvironment[agent.Namespace] = env.config.namespace()
inst, hardware, err := createContainer(env, args)
if err != nil {
return nil, err
}
return &environs.StartInstanceResult{
Instance: inst,
Hardware: hardware,
}, nil
}
示例4: finishInstanceConfig
func (env *environ) finishInstanceConfig(args environs.StartInstanceParams) error {
// TODO(natefinch): This is only correct so long as the lxd is running on
// the local machine. If/when we support a remote lxd environment, we'll
// need to change this to match the arch of the remote machine.
tools, err := args.Tools.Match(tools.Filter{Arch: arch.HostArch()})
if err != nil {
return errors.Trace(err)
}
if len(tools) == 0 {
return errors.Errorf("No tools available for architecture %q", arch.HostArch())
}
if err := args.InstanceConfig.SetTools(tools); err != nil {
return errors.Trace(err)
}
logger.Debugf("tools: %#v", args.InstanceConfig.ToolsList())
if err := instancecfg.FinishInstanceConfig(args.InstanceConfig, env.ecfg.Config); err != nil {
return errors.Trace(err)
}
// TODO: evaluate the impact of setting the constraints on the
// instanceConfig for all machines rather than just controller nodes.
// This limitation is why the constraints are assigned directly here.
args.InstanceConfig.Constraints = args.Constraints
args.InstanceConfig.AgentEnvironment[agent.Namespace] = env.ecfg.namespace()
return nil
}
示例5: TestFinishInstanceConfigNonDefault
func (s *CloudInitSuite) TestFinishInstanceConfigNonDefault(c *gc.C) {
userTag := names.NewLocalUserTag("not-touched")
attrs := dummySampleConfig().Merge(testing.Attrs{
"authorized-keys": "we-are-the-keys",
"ssl-hostname-verification": false,
})
cfg, err := config.New(config.NoDefaults, attrs)
c.Assert(err, jc.ErrorIsNil)
icfg := &instancecfg.InstanceConfig{
MongoInfo: &mongo.MongoInfo{Tag: userTag},
APIInfo: &api.Info{Tag: userTag},
}
err = instancecfg.FinishInstanceConfig(icfg, cfg)
c.Assert(err, jc.ErrorIsNil)
c.Assert(icfg, jc.DeepEquals, &instancecfg.InstanceConfig{
AuthorizedKeys: "we-are-the-keys",
AgentEnvironment: map[string]string{
agent.ProviderType: "dummy",
agent.ContainerType: "",
},
MongoInfo: &mongo.MongoInfo{Tag: userTag},
APIInfo: &api.Info{Tag: userTag},
DisableSSLHostnameVerification: true,
PreferIPv6: true,
EnableOSRefreshUpdate: true,
EnableOSUpgrade: true,
})
}
示例6: createContainer
func createContainer(c *gc.C, manager container.Manager, machineId string) instance.Instance {
machineNonce := "fake-nonce"
stateInfo := jujutesting.FakeStateInfo(machineId)
apiInfo := jujutesting.FakeAPIInfo(machineId)
instanceConfig, err := instancecfg.NewInstanceConfig(machineId, machineNonce, imagemetadata.ReleasedStream, "quantal", "", true, stateInfo, apiInfo)
c.Assert(err, jc.ErrorIsNil)
network := container.BridgeNetworkConfig("virbr0", 0, nil)
err = instanceConfig.SetTools(tools.List{
&tools.Tools{
Version: version.MustParseBinary("2.3.4-foo-bar"),
URL: "http://tools.testing.invalid/2.3.4-foo-bar.tgz",
},
})
c.Assert(err, jc.ErrorIsNil)
environConfig := dummyConfig(c)
err = instancecfg.FinishInstanceConfig(instanceConfig, environConfig)
c.Assert(err, jc.ErrorIsNil)
callback := func(settableStatus status.Status, info string, data map[string]interface{}) error { return nil }
inst, hardware, err := manager.CreateContainer(instanceConfig, "precise", network, nil, callback)
c.Assert(err, jc.ErrorIsNil)
c.Assert(hardware, gc.NotNil)
expected := fmt.Sprintf("arch=%s cpu-cores=1 mem=512M root-disk=8192M", arch.HostArch())
c.Assert(hardware.String(), gc.Equals, expected)
return inst
}
示例7: Bootstrap
// 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
}
示例8: getCloudConfig
func (s *configureSuite) getCloudConfig(c *gc.C, controller bool, vers version.Binary) cloudinit.CloudConfig {
var icfg *instancecfg.InstanceConfig
var err error
modelConfig := testConfig(c, controller, vers)
if controller {
icfg, err = instancecfg.NewBootstrapInstanceConfig(
coretesting.FakeControllerConfig(),
constraints.Value{}, constraints.Value{},
vers.Series, "",
)
c.Assert(err, jc.ErrorIsNil)
icfg.APIInfo = &api.Info{
Password: "password",
CACert: coretesting.CACert,
ModelTag: coretesting.ModelTag,
}
icfg.Controller.MongoInfo = &mongo.MongoInfo{
Password: "password", Info: mongo.Info{CACert: coretesting.CACert},
}
icfg.Bootstrap.ControllerModelConfig = modelConfig
icfg.Bootstrap.BootstrapMachineInstanceId = "instance-id"
icfg.Bootstrap.HostedModelConfig = map[string]interface{}{
"name": "hosted-model",
}
icfg.Bootstrap.StateServingInfo = params.StateServingInfo{
Cert: coretesting.ServerCert,
PrivateKey: coretesting.ServerKey,
CAPrivateKey: coretesting.CAKey,
StatePort: 123,
APIPort: 456,
}
icfg.Jobs = []multiwatcher.MachineJob{multiwatcher.JobManageModel, multiwatcher.JobHostUnits}
icfg.Bootstrap.StateServingInfo = params.StateServingInfo{
Cert: coretesting.ServerCert,
PrivateKey: coretesting.ServerKey,
CAPrivateKey: coretesting.CAKey,
StatePort: 123,
APIPort: 456,
}
} else {
icfg, err = instancecfg.NewInstanceConfig(coretesting.ControllerTag, "0", "ya", imagemetadata.ReleasedStream, vers.Series, nil)
c.Assert(err, jc.ErrorIsNil)
icfg.Jobs = []multiwatcher.MachineJob{multiwatcher.JobHostUnits}
}
err = icfg.SetTools(tools.List{
&tools.Tools{
Version: vers,
URL: "http://testing.invalid/tools.tar.gz",
},
})
err = instancecfg.FinishInstanceConfig(icfg, modelConfig)
c.Assert(err, jc.ErrorIsNil)
cloudcfg, err := cloudinit.New(icfg.Series)
c.Assert(err, jc.ErrorIsNil)
udata, err := cloudconfig.NewUserdataConfig(icfg, cloudcfg)
c.Assert(err, jc.ErrorIsNil)
err = udata.Configure()
c.Assert(err, jc.ErrorIsNil)
return cloudcfg
}
示例9: TestFinishInstanceConfig
func (s *CloudInitSuite) TestFinishInstanceConfig(c *gc.C) {
userTag := names.NewLocalUserTag("not-touched")
expectedMcfg := &instancecfg.InstanceConfig{
AuthorizedKeys: "we-are-the-keys",
AgentEnvironment: map[string]string{
agent.ProviderType: "dummy",
agent.ContainerType: "",
},
MongoInfo: &mongo.MongoInfo{Tag: userTag},
APIInfo: &api.Info{Tag: userTag},
DisableSSLHostnameVerification: false,
PreferIPv6: true,
EnableOSRefreshUpdate: true,
EnableOSUpgrade: true,
}
cfg, err := config.New(config.NoDefaults, dummySampleConfig().Merge(testing.Attrs{
"authorized-keys": "we-are-the-keys",
}))
c.Assert(err, jc.ErrorIsNil)
icfg := &instancecfg.InstanceConfig{
MongoInfo: &mongo.MongoInfo{Tag: userTag},
APIInfo: &api.Info{Tag: userTag},
}
err = instancecfg.FinishInstanceConfig(icfg, cfg)
c.Assert(err, jc.ErrorIsNil)
c.Assert(icfg, jc.DeepEquals, expectedMcfg)
// Test when updates/upgrades are set to false.
cfg, err = config.New(config.NoDefaults, dummySampleConfig().Merge(testing.Attrs{
"authorized-keys": "we-are-the-keys",
"enable-os-refresh-update": false,
"enable-os-upgrade": false,
}))
c.Assert(err, jc.ErrorIsNil)
err = instancecfg.FinishInstanceConfig(icfg, cfg)
c.Assert(err, jc.ErrorIsNil)
expectedMcfg.EnableOSRefreshUpdate = false
expectedMcfg.EnableOSUpgrade = false
c.Assert(icfg, jc.DeepEquals, expectedMcfg)
}
示例10: finishInstanceConfig
// finishInstanceConfig updates args.InstanceConfig in place. Setting up
// the API, StateServing, and SSHkeys information.
func (env *environ) finishInstanceConfig(args environs.StartInstanceParams, spec *instances.InstanceSpec) error {
envTools, err := args.Tools.Match(tools.Filter{Arch: spec.Image.Arch})
if err != nil {
return errors.Errorf("chosen architecture %v not present in %v", spec.Image.Arch, arches)
}
args.InstanceConfig.Tools = envTools[0]
return instancecfg.FinishInstanceConfig(args.InstanceConfig, env.Config())
}
示例11: StartInstance
// StartInstance asks for a new instance to be created, associated with
// the provided config in machineConfig. The given config describes the juju
// state for the new instance to connect to. The config MachineNonce, which must be
// unique within an environment, is used by juju to protect against the
// consequences of multiple instances being started with the same machine id.
func (env *environ) StartInstance(args environs.StartInstanceParams) (*environs.StartInstanceResult, error) {
logger.Infof("sigmaEnviron.StartInstance...")
if args.InstanceConfig == nil {
return nil, errors.New("instance configuration is nil")
}
if args.InstanceConfig.HasNetworks() {
return nil, errors.New("starting instances with networks is not supported yet")
}
if len(args.Tools) == 0 {
return nil, errors.New("tools not found")
}
img, err := findInstanceImage(args.ImageMetadata)
if err != nil {
return nil, err
}
tools, err := args.Tools.Match(tools.Filter{Arch: img.Arch})
if err != nil {
return nil, errors.Errorf("chosen architecture %v not present in %v", img.Arch, args.Tools.Arches())
}
args.InstanceConfig.Tools = tools[0]
if err := instancecfg.FinishInstanceConfig(args.InstanceConfig, env.Config()); err != nil {
return nil, err
}
userData, err := providerinit.ComposeUserData(args.InstanceConfig, nil, CloudSigmaRenderer{})
if err != nil {
return nil, errors.Annotate(err, "cannot make user data")
}
logger.Debugf("cloudsigma user data; %d bytes", len(userData))
client := env.client
server, rootdrive, arch, err := client.newInstance(args, img, userData)
if err != nil {
return nil, errors.Errorf("failed start instance: %v", err)
}
inst := &sigmaInstance{server: server}
// prepare hardware characteristics
hwch, err := inst.hardware(arch, rootdrive.Size())
if err != nil {
return nil, err
}
logger.Debugf("hardware: %v", hwch)
return &environs.StartInstanceResult{
Instance: inst,
Hardware: hwch,
}, nil
}
示例12: createInstanceConfig
func (*cloudinitSuite) createInstanceConfig(c *gc.C, environConfig *config.Config) *instancecfg.InstanceConfig {
machineId := "42"
machineNonce := "fake-nonce"
stateInfo := jujutesting.FakeStateInfo(machineId)
apiInfo := jujutesting.FakeAPIInfo(machineId)
instanceConfig, err := instancecfg.NewInstanceConfig(machineId, machineNonce, imagemetadata.ReleasedStream, "quantal", "", true, nil, stateInfo, apiInfo)
c.Assert(err, jc.ErrorIsNil)
instanceConfig.Tools = &tools.Tools{
Version: version.MustParseBinary("2.3.4-quantal-amd64"),
URL: "http://tools.testing.invalid/2.3.4-quantal-amd64.tgz",
}
err = instancecfg.FinishInstanceConfig(instanceConfig, environConfig)
c.Assert(err, jc.ErrorIsNil)
return instanceConfig
}
示例13: finishInstanceConfig
func (env *environ) finishInstanceConfig(args environs.StartInstanceParams) error {
args.InstanceConfig.Tools = args.Tools[0]
logger.Debugf("tools: %#v", args.InstanceConfig.Tools)
if err := instancecfg.FinishInstanceConfig(args.InstanceConfig, env.ecfg.Config); err != nil {
return errors.Trace(err)
}
// TODO: evaluate the impact of setting the constraints on the
// instanceConfig for all machines rather than just state server nodes.
// This limitation is why the constraints are assigned directly here.
args.InstanceConfig.Constraints = args.Constraints
args.InstanceConfig.AgentEnvironment[agent.Namespace] = env.ecfg.namespace()
return nil
}
示例14: finishInstanceConfig
func (env *environ) finishInstanceConfig(args environs.StartInstanceParams) error {
// TODO(natefinch): This is only correct so long as the lxd is running on
// the local machine. If/when we support a remote lxd environment, we'll
// need to change this to match the arch of the remote machine.
tools, err := args.Tools.Match(tools.Filter{Arch: arch.HostArch()})
if err != nil {
return errors.Trace(err)
}
if err := args.InstanceConfig.SetTools(tools); err != nil {
return errors.Trace(err)
}
if err := instancecfg.FinishInstanceConfig(args.InstanceConfig, env.ecfg.Config); err != nil {
return errors.Trace(err)
}
return nil
}
示例15: TestFinishBootstrapConfig
func (s *CloudInitSuite) TestFinishBootstrapConfig(c *gc.C) {
attrs := dummySampleConfig().Merge(testing.Attrs{
"authorized-keys": "we-are-the-keys",
"admin-secret": "lisboan-pork",
"agent-version": "1.2.3",
"state-server": false,
})
cfg, err := config.New(config.NoDefaults, attrs)
c.Assert(err, jc.ErrorIsNil)
oldAttrs := cfg.AllAttrs()
icfg := &instancecfg.InstanceConfig{
Bootstrap: true,
}
err = instancecfg.FinishInstanceConfig(icfg, cfg)
c.Assert(err, jc.ErrorIsNil)
c.Check(icfg.AuthorizedKeys, gc.Equals, "we-are-the-keys")
c.Check(icfg.DisableSSLHostnameVerification, jc.IsFalse)
password := utils.UserPasswordHash("lisboan-pork", utils.CompatSalt)
c.Check(icfg.APIInfo, gc.DeepEquals, &api.Info{
Password: password, CACert: testing.CACert,
ModelTag: testing.ModelTag,
})
c.Check(icfg.MongoInfo, gc.DeepEquals, &mongo.MongoInfo{
Password: password, Info: mongo.Info{CACert: testing.CACert},
})
c.Check(icfg.StateServingInfo.StatePort, gc.Equals, cfg.StatePort())
c.Check(icfg.StateServingInfo.APIPort, gc.Equals, cfg.APIPort())
c.Check(icfg.StateServingInfo.CAPrivateKey, gc.Equals, oldAttrs["ca-private-key"])
oldAttrs["ca-private-key"] = ""
oldAttrs["admin-secret"] = ""
c.Check(icfg.Config.AllAttrs(), gc.DeepEquals, oldAttrs)
srvCertPEM := icfg.StateServingInfo.Cert
srvKeyPEM := icfg.StateServingInfo.PrivateKey
_, _, err = cert.ParseCertAndKey(srvCertPEM, srvKeyPEM)
c.Check(err, jc.ErrorIsNil)
err = cert.Verify(srvCertPEM, testing.CACert, time.Now())
c.Assert(err, jc.ErrorIsNil)
err = cert.Verify(srvCertPEM, testing.CACert, time.Now().AddDate(9, 0, 0))
c.Assert(err, jc.ErrorIsNil)
err = cert.Verify(srvCertPEM, testing.CACert, time.Now().AddDate(10, 0, 1))
c.Assert(err, gc.NotNil)
}