func (utilsSuite) TestCompression(c *C) { cdata := utils.Gzip(data) c.Assert(len(cdata) < len(data), Equals, true) data1, err := utils.Gunzip(cdata) c.Assert(err, IsNil) c.Assert(data1, DeepEquals, data) data1, err = utils.Gunzip(compressedData) c.Assert(err, IsNil) c.Assert(data1, DeepEquals, data) }
func decodeUserData(userData string) ([]byte, error) { data, err := base64.StdEncoding.DecodeString(userData) if err != nil { return []byte(""), err } return utils.Gunzip(data) }
func (*CloudInitSuite) TestUserData(c *C) { testJujuHome := c.MkDir() defer config.SetJujuHome(config.SetJujuHome(testJujuHome)) tools := &tools.Tools{ URL: "http://foo.com/tools/juju1.2.3-linux-amd64.tgz", Binary: version.MustParseBinary("1.2.3-linux-amd64"), } envConfig, err := config.New(map[string]interface{}{ "type": "maas", "name": "foo", "default-series": "series", "authorized-keys": "keys", "ca-cert": testing.CACert, }) c.Assert(err, IsNil) cfg := &cloudinit.MachineConfig{ MachineId: "10", MachineNonce: "5432", Tools: tools, StateServerCert: []byte(testing.ServerCert), StateServerKey: []byte(testing.ServerKey), StateInfo: &state.Info{ Password: "******", CACert: []byte("CA CERT\n" + testing.CACert), }, APIInfo: &api.Info{ Password: "******", CACert: []byte("CA CERT\n" + testing.CACert), }, DataDir: environs.DataDir, Config: envConfig, StatePort: envConfig.StatePort(), APIPort: envConfig.APIPort(), StateServer: true, ProviderType: "dummy", } script1 := "script1" script2 := "script2" scripts := []string{script1, script2} result, err := environs.ComposeUserData(cfg, scripts...) c.Assert(err, IsNil) unzipped, err := utils.Gunzip(result) c.Assert(err, IsNil) config := make(map[interface{}]interface{}) err = goyaml.Unmarshal(unzipped, &config) c.Assert(err, IsNil) // Just check that the cloudinit config looks good. c.Check(config["apt_upgrade"], Equals, true) // The scripts given to userData where added as the first // commands to be run. runCmd := config["runcmd"].([]interface{}) c.Check(runCmd[0], Equals, script1) c.Check(runCmd[1], Equals, script2) }
func (t *localServerSuite) TestBootstrapInstanceUserDataAndState(c *C) { envtesting.UploadFakeTools(c, t.env.Storage()) err := environs.Bootstrap(t.env, constraints.Value{}) c.Assert(err, IsNil) // check that the state holds the id of the bootstrap machine. bootstrapState, err := environs.LoadState(t.env.Storage()) c.Assert(err, IsNil) c.Assert(bootstrapState.StateInstances, HasLen, 1) expectedHardware := instance.MustParseHardware("arch=amd64 cpu-cores=1 cpu-power=100 mem=1740M") insts, err := t.env.AllInstances() c.Assert(err, IsNil) c.Assert(insts, HasLen, 1) c.Check(insts[0].Id(), Equals, bootstrapState.StateInstances[0]) c.Check(expectedHardware, DeepEquals, bootstrapState.Characteristics[0]) info, apiInfo, err := t.env.StateInfo() c.Assert(err, IsNil) c.Assert(info, NotNil) // check that the user data is configured to start zookeeper // and the machine and provisioning agents. inst := t.srv.ec2srv.Instance(string(insts[0].Id())) c.Assert(inst, NotNil) bootstrapDNS, err := insts[0].DNSName() c.Assert(err, IsNil) c.Assert(bootstrapDNS, Not(Equals), "") userData, err := utils.Gunzip(inst.UserData) c.Assert(err, IsNil) c.Logf("first instance: UserData: %q", userData) var x map[interface{}]interface{} err = goyaml.Unmarshal(userData, &x) c.Assert(err, IsNil) CheckPackage(c, x, "git", true) CheckScripts(c, x, "jujud bootstrap-state", true) // TODO check for provisioning agent // TODO check for machine agent // check that a new instance will be started without // zookeeper, with a machine agent, and without a // provisioning agent. series := t.env.Config().DefaultSeries() info.Tag = "machine-1" apiInfo.Tag = "machine-1" inst1, hc, err := t.env.StartInstance("1", "fake_nonce", series, constraints.Value{}, info, apiInfo) c.Assert(err, IsNil) c.Check(*hc.Arch, Equals, "amd64") c.Check(*hc.Mem, Equals, uint64(1740)) c.Check(*hc.CpuCores, Equals, uint64(1)) c.Assert(*hc.CpuPower, Equals, uint64(100)) inst = t.srv.ec2srv.Instance(string(inst1.Id())) c.Assert(inst, NotNil) userData, err = utils.Gunzip(inst.UserData) c.Assert(err, IsNil) c.Logf("second instance: UserData: %q", userData) x = nil err = goyaml.Unmarshal(userData, &x) c.Assert(err, IsNil) CheckPackage(c, x, "zookeeperd", false) // TODO check for provisioning agent // TODO check for machine agent err = t.env.Destroy(append(insts, inst1)) c.Assert(err, IsNil) _, err = environs.LoadState(t.env.Storage()) c.Assert(err, NotNil) }