-
Notifications
You must be signed in to change notification settings - Fork 0
/
providerinit.go
64 lines (58 loc) · 1.82 KB
/
providerinit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright 2013, 2015 Canonical Ltd.
// Copyright 2015 Cloudbase Solutions SRL
// Licensed under the AGPLv3, see LICENCE file for details.
// This package offers userdata in a gzipped format to be used by different
// cloud providers
package providerinit
import (
"github.com/juju/loggo"
"github.com/juju/utils"
"github.com/juju/juju/cloudconfig"
"github.com/juju/juju/cloudconfig/cloudinit"
"github.com/juju/juju/cloudconfig/instancecfg"
)
var logger = loggo.GetLogger("juju.cloudconfig.providerinit")
func configureCloudinit(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig) (cloudconfig.UserdataConfig, error) {
// When bootstrapping, we only want to apt-get update/upgrade
// and setup the SSH keys. The rest we leave to cloudinit/sshinit.
udata, err := cloudconfig.NewUserdataConfig(icfg, cloudcfg)
if err != nil {
return nil, err
}
if icfg.Bootstrap {
err = udata.ConfigureBasic()
if err != nil {
return nil, err
}
return udata, nil
}
err = udata.Configure()
if err != nil {
return nil, err
}
return udata, nil
}
// 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 returns it as a binary (gzipped) blob of user data.
//
// If the provided cloudcfg is nil, a new one will be created internally.
func ComposeUserData(icfg *instancecfg.InstanceConfig, cloudcfg cloudinit.CloudConfig) ([]byte, error) {
if cloudcfg == nil {
var err error
cloudcfg, err = cloudinit.New(icfg.Series)
if err != nil {
return nil, err
}
}
_, err := configureCloudinit(icfg, cloudcfg)
if err != nil {
return nil, err
}
data, err := cloudcfg.RenderYAML()
logger.Tracef("Generated cloud init:\n%s", string(data))
if err != nil {
return nil, err
}
return utils.Gzip(data), nil
}