// ComposeUserData fills out the provided cloudinit configuration structure // so it is suitable for initialising a machine with the given configuration, // and then renders it and encodes it using the supplied renderer. // When calling ComposeUserData a encoding implementation must be chosen from // the providerinit/encoders package according to the need of the provider. // // If the provided cloudcfg is nil, a new one will be created internally. func ComposeUserData(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig, renderer renderers.ProviderRenderer) ([]byte, error) { if cloudcfg == nil { var err error cloudcfg, err = cloudinit.New(icfg.Series) if err != nil { return nil, errors.Trace(err) } } _, err := configureCloudinit(icfg, cloudcfg) if err != nil { return nil, errors.Trace(err) } operatingSystem, err := series.GetOSFromSeries(icfg.Series) if err != nil { return nil, errors.Trace(err) } // This might get replaced by a renderer.RenderUserdata which will either // render it as YAML or Bash since some CentOS images might ship without cloudnit udata, err := cloudcfg.RenderYAML() if err != nil { return nil, errors.Trace(err) } udata, err = renderer.EncodeUserdata(udata, operatingSystem) if err != nil { return nil, errors.Trace(err) } logger.Tracef("Generated cloud init:\n%s", string(udata)) return udata, err }
// ComposeUserData fills out the provided cloudinit configuration structure // so it is suitable for initialising a machine with the given configuration, // and then renders it and encodes it using the supplied renderer. // When calling ComposeUserData a encoding implementation must be chosen from // the providerinit/encoders package according to the need of the provider. // // If the provided cloudcfg is nil, a new one will be created internally. func ComposeUserData(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig, renderer renderers.ProviderRenderer) ([]byte, error) { if cloudcfg == nil { var err error cloudcfg, err = cloudinit.New(icfg.Series) if err != nil { return nil, errors.Trace(err) } } _, err := configureCloudinit(icfg, cloudcfg) if err != nil { return nil, errors.Trace(err) } operatingSystem, err := series.GetOSFromSeries(icfg.Series) if err != nil { return nil, errors.Trace(err) } udata, err := renderer.Render(cloudcfg, operatingSystem) if err != nil { return nil, errors.Trace(err) } logger.Tracef("Generated cloud init:\n%s", string(udata)) return udata, err }