func (*cloudinitSuite) TestCloudInitConfigure(c *C) { for i, test := range cloudinitTests { test.cfg.Config = minimalConfig(c) c.Logf("test %d (Configure)", i) cloudcfg := coreCloudinit.New() ci, err := cloudinit.Configure(&test.cfg, cloudcfg) c.Assert(err, IsNil) c.Check(ci, NotNil) } }
func (S) TestOutput(c *C) { for _, t := range ctests { cfg := cloudinit.New() t.setOption(cfg) data, err := cfg.Render() c.Assert(err, IsNil) c.Assert(data, NotNil) c.Assert(string(data), Equals, header+t.expect, Commentf("test %q output differs", t.name)) } }
//#cloud-config //packages: //- juju //- ubuntu func ExampleConfig() { cfg := cloudinit.New() cfg.AddPackage("juju") cfg.AddPackage("ubuntu") data, err := cfg.Render() if err != nil { fmt.Printf("render error: %v", err) return } fmt.Printf("%s", data) }
// ComposeUserData puts together a binary (gzipped) blob of user data. // The additionalScripts are additional command lines that you need cloudinit // to run on the instance. Use with care. func ComposeUserData(cfg *cloudinit.MachineConfig, additionalScripts ...string) ([]byte, error) { cloudcfg := coreCloudinit.New() for _, script := range additionalScripts { cloudcfg.AddRunCmd(script) } cloudcfg, err := cloudinit.Configure(cfg, cloudcfg) if err != nil { return nil, err } data, err := cloudcfg.Render() if err != nil { return nil, err } return utils.Gzip(data), nil }
func (*cloudinitSuite) TestCloudInitConfigureUsesGivenConfig(c *C) { // Create a simple cloudinit config with a 'runcmd' statement. cloudcfg := coreCloudinit.New() script := "test script" cloudcfg.AddRunCmd(script) cloudinitTests[0].cfg.Config = minimalConfig(c) ci, err := cloudinit.Configure(&cloudinitTests[0].cfg, cloudcfg) c.Assert(err, IsNil) c.Check(ci, NotNil) data, err := ci.Render() c.Assert(err, IsNil) ciContent := make(map[interface{}]interface{}) err = goyaml.Unmarshal(data, &ciContent) c.Assert(err, IsNil) // The 'runcmd' statement is at the beginning of the list // of 'runcmd' statements. runCmd := ciContent["runcmd"].([]interface{}) c.Check(runCmd[0], Equals, script) }
func New(cfg *MachineConfig) (*cloudinit.Config, error) { c := cloudinit.New() return Configure(cfg, c) }
func New(cfg *MachineConfig) (*cloudinit.Config, error) { if err := verifyConfig(cfg); err != nil { return nil, err } c := cloudinit.New() c.AddSSHAuthorizedKeys(cfg.AuthorizedKeys) c.AddPackage("git") addScripts(c, fmt.Sprintf("mkdir -p %s", cfg.DataDir), "mkdir -p /var/log/juju") // Make a directory for the tools to live in, then fetch the // tools and unarchive them into it. addScripts(c, "bin="+shquote(cfg.jujuTools()), "mkdir -p $bin", fmt.Sprintf("wget --no-verbose -O - %s | tar xz -C $bin", shquote(cfg.Tools.URL)), fmt.Sprintf("echo -n %s > $bin/downloaded-url.txt", shquote(cfg.Tools.URL)), ) debugFlag := "" // TODO: disable debug mode by default when the system is stable. if true || log.Debug { debugFlag = " --debug" } if cfg.StateServer { certKey := string(cfg.StateServerCert) + string(cfg.StateServerKey) addFile(c, cfg.dataFile("server.pem"), certKey, 0600) // TODO The public bucket must come from the environment configuration. b := cfg.Tools.Binary url := fmt.Sprintf("http://juju-dist.s3.amazonaws.com/tools/mongo-2.2.0-%s-%s.tgz", b.Series, b.Arch) addScripts(c, "mkdir -p /opt", fmt.Sprintf("wget --no-verbose -O - %s | tar xz -C /opt", shquote(url)), ) if err := addMongoToBoot(c, cfg); err != nil { return nil, err } // We temporarily give bootstrap-state a directory // of its own so that it can get the state info via the // same mechanism as other jujud commands. acfg, err := addAgentInfo(c, cfg, "bootstrap") if err != nil { return nil, err } addScripts(c, cfg.jujuTools()+"/jujud bootstrap-state"+ " --data-dir "+shquote(cfg.DataDir)+ " --instance-id "+cfg.InstanceIdAccessor+ " --env-config "+shquote(base64yaml(cfg.Config))+ debugFlag, "rm -rf "+shquote(acfg.Dir()), ) } if _, err := addAgentToBoot(c, cfg, "machine", state.MachineEntityName(cfg.MachineId), fmt.Sprintf("--machine-id %s "+debugFlag, cfg.MachineId)); err != nil { return nil, err } // general options c.SetAptUpgrade(true) c.SetAptUpdate(true) c.SetOutput(cloudinit.OutAll, "| tee -a /var/log/cloud-init-output.log", "") return c, nil }