本文整理汇总了Golang中github.com/juju/juju/environs/storage.Storage类的典型用法代码示例。如果您正苦于以下问题:Golang Storage类的具体用法?Golang Storage怎么用?Golang Storage使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Storage类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: removeAll
func removeAll(stor storage.Storage) error {
names, err := storage.List(stor, "")
if err != nil {
return err
}
// Remove all the objects in parallel so that we incur fewer round-trips.
// If we're in danger of having hundreds of objects,
// we'll want to change this to limit the number
// of concurrent operations.
var wg sync.WaitGroup
wg.Add(len(names))
errc := make(chan error, len(names))
for _, name := range names {
name := name
go func() {
defer wg.Done()
if err := stor.Remove(name); err != nil {
errc <- err
}
}()
}
wg.Wait()
select {
case err := <-errc:
return fmt.Errorf("cannot delete all provider state: %v", err)
default:
}
return nil
}
示例2: CreateStateFile
// CreateStateFile creates an empty state file on the given storage, and
// returns its URL.
func CreateStateFile(stor storage.Storage) (string, error) {
err := putState(stor, []byte{})
if err != nil {
return "", fmt.Errorf("cannot create initial state file: %v", err)
}
return stor.URL(StateFile)
}
示例3: metadataUnchanged
// metadataUnchanged returns true if the content of metadata for stream in stor is the same
// as generatedMetadata, ignoring the "updated" attribute.
func metadataUnchanged(stor storage.Storage, stream string, generatedMetadata []byte) (bool, error) {
mdPath := ProductMetadataPath(stream)
filePath := path.Join(storage.BaseToolsPath, mdPath)
existingDataReader, err := stor.Get(filePath)
// If the file can't be retrieved, consider it has changed.
if err != nil {
return false, nil
}
defer existingDataReader.Close()
existingData, err := ioutil.ReadAll(existingDataReader)
if err != nil {
return false, err
}
// To do the comparison, we unmarshall the metadata, clear the
// updated value, and marshall back to a string.
existingMetadata, err := removeMetadataUpdated(existingData)
if err != nil {
return false, err
}
newMetadata, err := removeMetadataUpdated(generatedMetadata)
if err != nil {
return false, err
}
return existingMetadata == newMetadata, nil
}
示例4: syncBuiltTools
// syncBuiltTools copies to storage a tools tarball and cloned copies for each series.
func syncBuiltTools(stor storage.Storage, stream string, builtTools *BuiltAgent, fakeSeries ...string) (*coretools.Tools, error) {
if err := cloneToolsForSeries(builtTools, stream, fakeSeries...); err != nil {
return nil, err
}
syncContext := &SyncContext{
Source: builtTools.Dir,
TargetToolsFinder: StorageToolsFinder{stor},
TargetToolsUploader: StorageToolsUploader{stor, false, false},
AllVersions: true,
Stream: stream,
MajorVersion: builtTools.Version.Major,
MinorVersion: -1,
}
logger.Debugf("uploading agent binaries to cloud storage")
err := SyncTools(syncContext)
if err != nil {
return nil, err
}
url, err := stor.URL(builtTools.StorageName)
if err != nil {
return nil, err
}
return &coretools.Tools{
Version: builtTools.Version,
URL: url,
Size: builtTools.Size,
SHA256: builtTools.Sha256Hash,
}, nil
}
示例5: restoreBootstrapVerificationFile
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)
}
示例6: SyncBuiltTools
// SyncBuiltTools copies to storage a tools tarball and cloned copies for each series.
func SyncBuiltTools(stor storage.Storage, builtTools *BuiltTools, fakeSeries ...string) (*coretools.Tools, error) {
if err := cloneToolsForSeries(builtTools, fakeSeries...); err != nil {
return nil, err
}
syncContext := &SyncContext{
Source: builtTools.Dir,
Target: stor,
AllVersions: true,
Dev: builtTools.Version.IsDev(),
MajorVersion: builtTools.Version.Major,
MinorVersion: -1,
}
logger.Debugf("uploading tools to cloud storage")
err := SyncTools(syncContext)
if err != nil {
return nil, err
}
url, err := stor.URL(builtTools.StorageName)
if err != nil {
return nil, err
}
return &coretools.Tools{
Version: builtTools.Version,
URL: url,
Size: builtTools.Size,
SHA256: builtTools.Sha256Hash,
}, nil
}
示例7: RemoveFakeToolsMetadata
// RemoveFakeToolsMetadata deletes the fake simplestreams tools metadata from the supplied storage.
func RemoveFakeToolsMetadata(c *gc.C, stor storage.Storage) {
files := []string{simplestreams.UnsignedIndex, envtools.ProductMetadataPath}
for _, file := range files {
toolspath := path.Join("tools", file)
err := stor.Remove(toolspath)
c.Check(err, gc.IsNil)
}
}
示例8: RemoveFakeToolsMetadata
// RemoveFakeToolsMetadata deletes the fake simplestreams tools metadata from the supplied storage.
func RemoveFakeToolsMetadata(c *gc.C, stor storage.Storage) {
files, err := stor.List("tools/streams")
c.Assert(err, jc.ErrorIsNil)
for _, file := range files {
err = stor.Remove(file)
c.Check(err, jc.ErrorIsNil)
}
}
示例9: RemoveTools
// RemoveTools deletes all tools from the supplied storage.
func RemoveTools(c *gc.C, stor storage.Storage, toolsDir string) {
names, err := storage.List(stor, fmt.Sprintf("tools/%s/juju-", toolsDir))
c.Assert(err, jc.ErrorIsNil)
c.Logf("removing files: %v", names)
for _, name := range names {
err = stor.Remove(name)
c.Check(err, jc.ErrorIsNil)
}
RemoveFakeToolsMetadata(c, stor)
}
示例10: RemoveTools
// RemoveTools deletes all tools from the supplied storage.
func RemoveTools(c *gc.C, stor storage.Storage) {
names, err := storage.List(stor, "tools/releases/juju-")
c.Assert(err, gc.IsNil)
c.Logf("removing files: %v", names)
for _, name := range names {
err = stor.Remove(name)
c.Check(err, gc.IsNil)
}
RemoveFakeToolsMetadata(c, stor)
}
示例11: VerifyStorage
// 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
}
示例12: uploadMetadataFile
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)
}
示例13: UseTestImageMetadata
func UseTestImageMetadata(c *gc.C, stor storage.Storage) {
files := map[string]string{
"images/streams/v1/index.json": indexData,
"images/streams/v1/com.ubuntu.cloud:released:maas.json": imagesData,
}
for f, d := range files {
rdr := strings.NewReader(d)
err := stor.Put(f, rdr, int64(len(d)))
c.Assert(err, jc.ErrorIsNil)
}
}
示例14: UseTestImageData
func UseTestImageData(stor envstorage.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.UnsignedIndex("v1", 1), bytes.NewReader(data), int64(len(data)))
stor.Put(
productMetadatafile, strings.NewReader(imagesData), int64(len(imagesData)))
}
示例15: storageCopy
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()))
}