本文整理汇总了Golang中launchpad/net/juju-core/state.Charm.BundleSha256方法的典型用法代码示例。如果您正苦于以下问题:Golang Charm.BundleSha256方法的具体用法?Golang Charm.BundleSha256怎么用?Golang Charm.BundleSha256使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类launchpad/net/juju-core/state.Charm
的用法示例。
在下文中一共展示了Charm.BundleSha256方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: download
// download fetches the supplied charm and checks that it has the correct sha256
// hash, then copies it into the directory. If a value is received on abort, the
// download will be stopped.
func (d *BundlesDir) download(sch *state.Charm, abort <-chan struct{}) (err error) {
defer trivial.ErrorContextf(&err, "failed to download charm %q from %q", sch.URL(), sch.BundleURL())
dir := d.downloadsPath()
if err := os.MkdirAll(dir, 0755); err != nil {
return err
}
burl := sch.BundleURL().String()
log.Printf("worker/uniter/charm: downloading %s from %s", sch.URL(), burl)
dl := downloader.New(burl, dir)
defer dl.Stop()
for {
select {
case <-abort:
log.Printf("worker/uniter/charm: download aborted")
return fmt.Errorf("aborted")
case st := <-dl.Done():
if st.Err != nil {
return st.Err
}
log.Printf("worker/uniter/charm: download complete")
defer st.File.Close()
hash := sha256.New()
if _, err = io.Copy(hash, st.File); err != nil {
return err
}
actualSha256 := hex.EncodeToString(hash.Sum(nil))
if actualSha256 != sch.BundleSha256() {
return fmt.Errorf(
"expected sha256 %q, got %q", sch.BundleSha256(), actualSha256,
)
}
log.Printf("worker/uniter/charm: download verified")
if err := os.MkdirAll(d.path, 0755); err != nil {
return err
}
return os.Rename(st.File.Name(), d.bundlePath(sch))
}
}
panic("unreachable")
}