func restoreBootstrapVerificationFile(c *gc.C, stor storage.Storage) { content := "juju-core storage writing verified: ok\n" contentReader := strings.NewReader(content) err := stor.Put("bootstrap-verify", contentReader, int64(len(content))) c.Assert(err, gc.IsNil) }
// VerifyStorage writes the bootstrap init file to the storage to indicate // that the storage is writable. func VerifyStorage(stor storage.Storage) error { reader := strings.NewReader(verificationContent) err := stor.Put(VerificationFilename, reader, int64(len(verificationContent))) if err != nil { logger.Warningf("failed to write bootstrap-verify file: %v", err) return VerifyStorageError } return nil }
func uploadMetadataFile(stor storage.Storage, metadataDir, fileName string, size int64) error { fullSourceFilename := filepath.Join(metadataDir, fileName) logger.Debugf("uploading metadata file %s", fileName) f, err := os.Open(fullSourceFilename) if err != nil { return err } defer f.Close() destMetadataDir := path.Join(storage.BaseImagesPath, simplestreams.StreamsDir) return stor.Put(path.Join(destMetadataDir, fileName), f, size) }
func UseTestImageData(stor storage.Storage, cred *identity.Credentials) { // Put some image metadata files into the public storage. t := template.Must(template.New("").Parse(indexData)) var metadata bytes.Buffer if err := t.Execute(&metadata, cred); err != nil { panic(fmt.Errorf("cannot generate index metdata: %v", err)) } data := metadata.Bytes() stor.Put(simplestreams.DefaultIndexPath+".json", bytes.NewReader(data), int64(len(data))) stor.Put( productMetadatafile, strings.NewReader(imagesData), int64(len(imagesData))) }
func storageCopy(source storage.Storage, sourcePath string, target storage.Storage, targetPath string) error { rc, err := storage.Get(source, sourcePath) if err != nil { return err } var buf bytes.Buffer _, err = io.Copy(&buf, rc) rc.Close() if err != nil { return err } return target.Put(targetPath, &buf, int64(buf.Len())) }
func uploadFakeToolsVersion(stor storage.Storage, vers version.Binary) (*coretools.Tools, error) { logger.Infof("uploading FAKE tools %s", vers) tgz, checksum := coretesting.TarGz( coretesting.NewTarFile("jujud", 0777, "jujud contents "+vers.String())) size := int64(len(tgz)) name := envtools.StorageName(vers) if err := stor.Put(name, bytes.NewReader(tgz), size); err != nil { return nil, err } url, err := stor.URL(name) if err != nil { return nil, err } return &coretools.Tools{URL: url, Version: vers, Size: size, SHA256: checksum}, nil }
func checkRemoveAll(c *gc.C, stor storage.Storage) { contents := []byte("File contents.") aFile := "a-file.txt" err := stor.Put(aFile, bytes.NewBuffer(contents), int64(len(contents))) c.Assert(err, gc.IsNil) err = stor.Put("empty-file", bytes.NewBuffer(nil), 0) c.Assert(err, gc.IsNil) err = stor.RemoveAll() c.Assert(err, gc.IsNil) files, err := storage.List(stor, "") c.Assert(err, gc.IsNil) c.Check(files, gc.HasLen, 0) _, err = storage.Get(stor, aFile) c.Assert(err, gc.NotNil) c.Check(err, gc.ErrorMatches, fmt.Sprintf("file %q not found", aFile)) }
// writeMetadata generates some basic simplestreams metadata using the specified cloud and image details and writes // it to the supplied store. func writeMetadata(metadata []*ImageMetadata, cloudSpec []simplestreams.CloudSpec, metadataStore storage.Storage) error { index, products, err := MarshalImageMetadataJSON(metadata, cloudSpec, time.Now()) if err != nil { return err } metadataInfo := []MetadataFile{ {simplestreams.UnsignedIndex, index}, {ProductMetadataPath, products}, } for _, md := range metadataInfo { err = metadataStore.Put( filepath.Join(storage.BaseImagesPath, md.Path), bytes.NewReader(md.Data), int64(len(md.Data))) if err != nil { return err } } return nil }
// UploadToStorage uploads tools and metadata for the specified versions to storage. func UploadToStorage(c *gc.C, stor storage.Storage, versions ...version.Binary) map[version.Binary]string { uploaded := map[version.Binary]string{} if len(versions) == 0 { return uploaded } var err error for _, vers := range versions { filename := fmt.Sprintf("tools/releases/tools-%s.tar.gz", vers.String()) // Put a file in images since the dummy storage provider requires a // file to exist before the URL can be found. This is to ensure it behaves // the same way as MAAS. err = stor.Put(filename, strings.NewReader("dummy"), 5) c.Assert(err, gc.IsNil) uploaded[vers], err = stor.URL(filename) c.Assert(err, gc.IsNil) } objects := generateMetadata(c, versions...) for _, object := range objects { toolspath := path.Join("tools", object.path) err = stor.Put(toolspath, bytes.NewReader(object.data), int64(len(object.data))) c.Assert(err, gc.IsNil) } return uploaded }