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  }