github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/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/loggo" 11 "github.com/juju/utils" 12 13 "github.com/juju/juju/cloudconfig" 14 "github.com/juju/juju/cloudconfig/cloudinit" 15 "github.com/juju/juju/cloudconfig/instancecfg" 16 ) 17 18 var logger = loggo.GetLogger("juju.cloudconfig.providerinit") 19 20 func configureCloudinit(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig) (cloudconfig.UserdataConfig, error) { 21 // When bootstrapping, we only want to apt-get update/upgrade 22 // and setup the SSH keys. The rest we leave to cloudinit/sshinit. 23 udata, err := cloudconfig.NewUserdataConfig(icfg, cloudcfg) 24 if err != nil { 25 return nil, err 26 } 27 if icfg.Bootstrap { 28 err = udata.ConfigureBasic() 29 if err != nil { 30 return nil, err 31 } 32 return udata, nil 33 } 34 err = udata.Configure() 35 if err != nil { 36 return nil, err 37 } 38 return udata, nil 39 } 40 41 // ComposeUserData fills out the provided cloudinit configuration structure 42 // so it is suitable for initialising a machine with the given configuration, 43 // and then renders it and returns it as a binary (gzipped) blob of user data. 44 // 45 // If the provided cloudcfg is nil, a new one will be created internally. 46 func ComposeUserData(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig) ([]byte, error) { 47 if cloudcfg == nil { 48 var err error 49 cloudcfg, err = cloudinit.New(icfg.Series) 50 if err != nil { 51 return nil, err 52 } 53 } 54 _, err := configureCloudinit(icfg, cloudcfg) 55 if err != nil { 56 return nil, err 57 } 58 data, err := cloudcfg.RenderYAML() 59 logger.Tracef("Generated cloud init:\n%s", string(data)) 60 if err != nil { 61 return nil, err 62 } 63 return utils.Gzip(data), nil 64 }