github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/cloudconfig/providerinit/providerinit.go (about) 1 // Copyright 2013, 2015 Canonical Ltd. 2 // Copyright 2015 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 // This package offers userdata in a gzipped format to be used by different 6 // cloud providers 7 package providerinit 8 9 import ( 10 "github.com/juju/errors" 11 "github.com/juju/loggo" 12 "github.com/juju/utils/series" 13 14 "github.com/juju/juju/cloudconfig" 15 "github.com/juju/juju/cloudconfig/cloudinit" 16 "github.com/juju/juju/cloudconfig/instancecfg" 17 "github.com/juju/juju/cloudconfig/providerinit/renderers" 18 ) 19 20 var logger = loggo.GetLogger("juju.cloudconfig.providerinit") 21 22 func configureCloudinit(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig) (cloudconfig.UserdataConfig, error) { 23 // When bootstrapping, we only want to apt-get update/upgrade 24 // and setup the SSH keys. The rest we leave to cloudinit/sshinit. 25 udata, err := cloudconfig.NewUserdataConfig(icfg, cloudcfg) 26 if err != nil { 27 return nil, err 28 } 29 if icfg.Bootstrap { 30 err = udata.ConfigureBasic() 31 if err != nil { 32 return nil, err 33 } 34 return udata, nil 35 } 36 err = udata.Configure() 37 if err != nil { 38 return nil, err 39 } 40 return udata, nil 41 } 42 43 // ComposeUserData fills out the provided cloudinit configuration structure 44 // so it is suitable for initialising a machine with the given configuration, 45 // and then renders it and encodes it using the supplied renderer. 46 // When calling ComposeUserData a encoding implementation must be chosen from 47 // the providerinit/encoders package according to the need of the provider. 48 // 49 // If the provided cloudcfg is nil, a new one will be created internally. 50 func ComposeUserData(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig, renderer renderers.ProviderRenderer) ([]byte, error) { 51 if cloudcfg == nil { 52 var err error 53 cloudcfg, err = cloudinit.New(icfg.Series) 54 if err != nil { 55 return nil, errors.Trace(err) 56 } 57 } 58 _, err := configureCloudinit(icfg, cloudcfg) 59 if err != nil { 60 return nil, errors.Trace(err) 61 } 62 operatingSystem, err := series.GetOSFromSeries(icfg.Series) 63 if err != nil { 64 return nil, errors.Trace(err) 65 } 66 udata, err := renderer.Render(cloudcfg, operatingSystem) 67 if err != nil { 68 return nil, errors.Trace(err) 69 } 70 logger.Tracef("Generated cloud init:\n%s", string(udata)) 71 return udata, err 72 }