本文整理汇总了Golang中github.com/coreos/rkt/Godeps/_workspace/src/github.com/appc/spec/schema/types.NewHash函数的典型用法代码示例。如果您正苦于以下问题:Golang NewHash函数的具体用法?Golang NewHash怎么用?Golang NewHash使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewHash函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: findImage
// findImage will recognize a ACI hash and use that, import a local file, use
// discovery or download an ACI directly.
func (f *finder) findImage(img string, asc string, discover bool) (*types.Hash, error) {
// check if it is a valid hash, if so let it pass through
h, err := types.NewHash(img)
if err == nil {
fullKey, err := f.s.ResolveKey(img)
if err != nil {
return nil, fmt.Errorf("could not resolve key: %v", err)
}
h, err = types.NewHash(fullKey)
if err != nil {
// should never happen
panic(err)
}
return h, nil
}
// try fetching the image, potentially remotely
ft := &fetcher{
imageActionData: f.imageActionData,
local: f.local,
withDeps: f.withDeps,
}
key, err := ft.fetchImage(img, asc, discover)
if err != nil {
return nil, err
}
h, err = types.NewHash(key)
if err != nil {
// should never happen
panic(err)
}
return h, nil
}
开发者ID:ChengTiesheng,项目名称:rkt,代码行数:36,代码来源:images.go
示例2: getAppImageID
// getAppImageID returns the image id to enter
// If one was supplied in the flags then it's simply returned
// If the PM contains a single image, that image's id is returned
// If the PM has multiple images, the ids and names are printed and an error is returned
func getAppImageID(p *pod) (*types.Hash, error) {
if flagAppImageID != "" {
return types.NewHash(flagAppImageID)
}
// figure out the image id, or show a list if multiple are present
b, err := ioutil.ReadFile(common.PodManifestPath(p.path()))
if err != nil {
return nil, fmt.Errorf("error reading pod manifest: %v", err)
}
m := schema.PodManifest{}
if err = m.UnmarshalJSON(b); err != nil {
return nil, fmt.Errorf("unable to load manifest: %v", err)
}
switch len(m.Apps) {
case 0:
return nil, fmt.Errorf("pod contains zero apps")
case 1:
return &m.Apps[0].Image.ID, nil
default:
}
stderr("Pod contains multiple apps:")
for _, ra := range m.Apps {
stderr("\t%s: %s", types.ShortHash(ra.Image.ID.String()), ra.Name.String())
}
return nil, fmt.Errorf("specify app using \"rkt enter --imageid ...\"")
}
开发者ID:danieltaborda,项目名称:rkt,代码行数:35,代码来源:enter.go
示例3: getHashFromStore
func (f *Finder) getHashFromStore(img string) (*types.Hash, error) {
h, err := types.NewHash(img)
if err != nil {
return nil, fmt.Errorf("%q is not a valid hash: %v", img, err)
}
fullKey, err := f.S.ResolveKey(img)
if err != nil {
return nil, fmt.Errorf("could not resolve image ID %q: %v", img, err)
}
h, err = types.NewHash(fullKey)
if err != nil {
// should never happen
panic(fmt.Errorf("got an invalid hash from the store, looks like it is corrupted: %v", err))
}
return h, nil
}
开发者ID:matomesc,项目名称:rkt,代码行数:16,代码来源:finder.go
示例4: runRmImage
func runRmImage(cmd *cobra.Command, args []string) (exit int) {
if len(args) < 1 {
stderr("rkt: Must provide at least one image key")
return 1
}
s, err := store.NewStore(globalFlags.Dir)
if err != nil {
stderr("rkt: cannot open store: %v", err)
return 1
}
//TODO(sgotti) Which return code to use when the removal fails only for some images?
done := 0
errors := 0
staleErrors := 0
for _, pkey := range args {
errors++
h, err := types.NewHash(pkey)
if err != nil {
stderr("rkt: wrong imageID %q: %v", pkey, err)
continue
}
key, err := s.ResolveKey(h.String())
if err != nil {
stderr("rkt: imageID %q not valid: %v", pkey, err)
continue
}
if key == "" {
stderr("rkt: imageID %q doesn't exists", pkey)
continue
}
if err = s.RemoveACI(key); err != nil {
if serr, ok := err.(*store.StoreRemovalError); ok {
staleErrors++
stderr("rkt: some files cannot be removed for imageID %q: %v", pkey, serr)
} else {
stderr("rkt: error removing aci for imageID %q: %v", pkey, err)
continue
}
}
stdout("rkt: successfully removed aci for imageID: %q", pkey)
errors--
done++
}
if done > 0 {
stderr("rkt: %d image(s) successfully removed", done)
}
if errors > 0 {
stderr("rkt: %d image(s) cannot be removed", errors)
}
if staleErrors > 0 {
stderr("rkt: %d image(s) removed but left some stale files", staleErrors)
}
return 0
}
开发者ID:NeilW,项目名称:rkt,代码行数:58,代码来源:image_rm.go
示例5: runImageCatManifest
func runImageCatManifest(cmd *cobra.Command, args []string) (exit int) {
if len(args) != 1 {
cmd.Usage()
return 1
}
s, err := store.NewStore(globalFlags.Dir)
if err != nil {
stderr("image cat-manifest: cannot open store: %v", err)
return 1
}
var key string
if _, err := types.NewHash(args[0]); err == nil {
key, err = s.ResolveKey(args[0])
if err != nil {
stderr("image cat-manifest: cannot resolve key: %v", err)
return 1
}
} else {
app, err := discovery.NewAppFromString(args[0])
if err != nil {
stderr("image cat-manifest: cannot parse the image name: %v", err)
return 1
}
labels, err := types.LabelsFromMap(app.Labels)
if err != nil {
stderr("image cat-manifest: invalid labels in the name: %v", err)
return 1
}
key, err = s.GetACI(app.Name, labels)
if err != nil {
stderr("image cat-manifest: cannot find image: %v", err)
return 1
}
}
manifest, err := s.GetImageManifest(key)
if err != nil {
stderr("image cat-manifest: cannot get image manifest: %v", err)
return 1
}
var b []byte
if flagPrettyPrint {
b, err = json.MarshalIndent(manifest, "", "\t")
} else {
b, err = json.Marshal(manifest)
}
if err != nil {
stderr("image cat-manifest: cannot read the image manifest: %v", err)
return 1
}
stdout(string(b))
return 0
}
开发者ID:danieltaborda,项目名称:rkt,代码行数:57,代码来源:image_cat_manifest.go
示例6: getStage1Hash
// getStage1Hash returns the hash of the stage1 image used in this pod
func (p *pod) getStage1Hash() (*types.Hash, error) {
s1IDb, err := p.readFile(common.Stage1IDFilename)
if err != nil {
return nil, err
}
s1img, err := types.NewHash(string(s1IDb))
if err != nil {
return nil, err
}
return s1img, nil
}
开发者ID:runyontr,项目名称:rkt,代码行数:13,代码来源:pods.go
示例7: rmImages
func rmImages(s *store.Store, images []string) error {
done := 0
errors := 0
staleErrors := 0
for _, pkey := range images {
errors++
h, err := types.NewHash(pkey)
if err != nil {
stderr("rkt: wrong image ID %q: %v", pkey, err)
continue
}
key, err := s.ResolveKey(h.String())
if err != nil {
stderr("rkt: image ID %q not valid: %v", pkey, err)
continue
}
if key == "" {
stderr("rkt: image ID %q doesn't exist", pkey)
continue
}
if err = s.RemoveACI(key); err != nil {
if serr, ok := err.(*store.StoreRemovalError); ok {
staleErrors++
stderr("rkt: some files cannot be removed for image ID %q: %v", pkey, serr)
} else {
stderr("rkt: error removing aci for image ID %q: %v", pkey, err)
continue
}
}
stdout("rkt: successfully removed aci for image ID: %q", pkey)
errors--
done++
}
if done > 0 {
stderr("rkt: %d image(s) successfully removed", done)
}
// If anything didn't complete, return exit status of 1
if (errors + staleErrors) > 0 {
if staleErrors > 0 {
stderr("rkt: %d image(s) removed but left some stale files", staleErrors)
}
if errors > 0 {
stderr("rkt: %d image(s) cannot be removed", errors)
}
return fmt.Errorf("error(s) found while removing images")
}
return nil
}
开发者ID:ngorskig,项目名称:rkt,代码行数:52,代码来源:image_rm.go
示例8: getStoreKeyFromAppOrHash
func getStoreKeyFromAppOrHash(s *store.Store, input string) (string, error) {
var key string
if _, err := types.NewHash(input); err == nil {
key, err = s.ResolveKey(input)
if err != nil {
return "", fmt.Errorf("cannot resolve key: %v", err)
}
} else {
key, err = getStoreKeyFromApp(s, input)
if err != nil {
return "", fmt.Errorf("cannot find image: %v", err)
}
}
return key, nil
}
开发者ID:ChengTiesheng,项目名称:rkt,代码行数:15,代码来源:images.go
示例9: guessImageType
func guessImageType(image string) apps.AppImageType {
if _, err := types.NewHash(image); err == nil {
return apps.AppImageHash
}
if u, err := url.Parse(image); err == nil && u.Scheme != "" {
return apps.AppImageURL
}
if filepath.IsAbs(image) {
return apps.AppImagePath
}
// Well, at this point is basically heuristics time. The image
// parameter can be either a relative path or an image name.
// First, let's check if there is a colon in the image
// parameter. Colon often serves as a paths separator (like in
// the PATH environment variable), so if it exists, then it is
// highly unlikely that the image parameter is a path. Colon
// in this context is often used for specifying a version of
// an image, like in "example.com/reduce-worker:1.0.0".
if strings.ContainsRune(image, ':') {
return apps.AppImageName
}
// Second, let's check if there is a dot followed by a slash
// (./) - if so, it is likely that the image parameter is path
// like ./aci-in-this-dir or ../aci-in-parent-dir
if strings.Contains(image, "./") {
return apps.AppImagePath
}
// Third, let's check if the image parameter has an .aci
// extension. If so, likely a path like "stage1-coreos.aci".
if filepath.Ext(image) == schema.ACIExtension {
return apps.AppImagePath
}
// At this point, if the image parameter is something like
// "coreos.com/rkt/stage1-coreos" and you have a directory
// tree "coreos.com/rkt" in the current working directory and
// you meant the image parameter to point to the file
// "stage1-coreos" in this directory tree, then you better be
// off prepending the parameter with "./", because I'm gonna
// treat this as an image name otherwise.
return apps.AppImageName
}
开发者ID:jshxu,项目名称:rkt,代码行数:46,代码来源:common.go
示例10: Write
// Write renders the ACI with the provided key in the treestore
// Write, to avoid having a rendered ACI with old stale files, requires that
// the destination directory doesn't exist (usually Remove should be called
// before Write)
func (ts *TreeStore) Write(key string, s *Store) error {
treepath := filepath.Join(ts.path, key)
fi, _ := os.Stat(treepath)
if fi != nil {
return fmt.Errorf("treestore: path %s already exists", treepath)
}
imageID, err := types.NewHash(key)
if err != nil {
return fmt.Errorf("treestore: cannot convert key to imageID: %v", err)
}
if err := os.MkdirAll(treepath, 0755); err != nil {
return fmt.Errorf("treestore: cannot create treestore directory %s: %v", treepath, err)
}
err = aci.RenderACIWithImageID(*imageID, treepath, s)
if err != nil {
return fmt.Errorf("treestore: cannot render aci: %v", err)
}
hash, err := ts.Hash(key)
if err != nil {
return fmt.Errorf("treestore: cannot calculate tree hash: %v", err)
}
err = ioutil.WriteFile(filepath.Join(treepath, hashfilename), []byte(hash), 0644)
if err != nil {
return fmt.Errorf("treestore: cannot write hash file: %v", err)
}
// before creating the "rendered" flag file we need to ensure that all data is fsynced
dfd, err := syscall.Open(treepath, syscall.O_RDONLY, 0)
if err != nil {
return err
}
defer syscall.Close(dfd)
if err := sys.Syncfs(dfd); err != nil {
return fmt.Errorf("treestore: failed to sync data: %v", err)
}
// Create rendered file
f, err := os.Create(filepath.Join(treepath, renderedfilename))
if err != nil {
return fmt.Errorf("treestore: failed to write rendered file: %v", err)
}
f.Close()
if err := syscall.Fsync(dfd); err != nil {
return fmt.Errorf("treestore: failed to sync tree store directory: %v", err)
}
return nil
}
开发者ID:danieltaborda,项目名称:rkt,代码行数:50,代码来源:tree.go
示例11: GetTreeStoreID
// GetTreeStoreID calculates the treestore ID for the given image key.
// The treeStoreID is computed as an hash of the flattened dependency tree
// image keys. In this way the ID may change for the same key if the image's
// dependencies change.
func (s Store) GetTreeStoreID(key string) (string, error) {
hash, err := types.NewHash(key)
if err != nil {
return "", err
}
images, err := acirenderer.CreateDepListFromImageID(*hash, s)
if err != nil {
return "", err
}
keys := []string{}
for _, image := range images {
keys = append(keys, image.Key)
}
imagesString := strings.Join(keys, ",")
h := sha512.New()
h.Write([]byte(imagesString))
return "deps-" + hashToKey(h), nil
}
开发者ID:jimberlage,项目名称:rkt,代码行数:23,代码来源:store.go
示例12: FindImage
// FindImage tries to get a hash of a passed image, ideally from
// store. Otherwise this might involve fetching it from remote with
// the Fetcher.
func (f *Finder) FindImage(img string, asc string, imgType apps.AppImageType) (*types.Hash, error) {
if imgType == apps.AppImageGuess {
imgType = guessImageType(img)
}
if imgType == apps.AppImageHash {
return f.getHashFromStore(img)
}
// urls, names, paths have to be fetched, potentially remotely
ft := (*Fetcher)(f)
key, err := ft.FetchImage(img, asc, imgType)
if err != nil {
return nil, err
}
h, err := types.NewHash(key)
if err != nil {
// should never happen
panic(fmt.Errorf("got an invalid hash from the store, looks like it is corrupted: %v", err))
}
return h, nil
}
开发者ID:matomesc,项目名称:rkt,代码行数:25,代码来源:finder.go
示例13: getKeyFromAppOrHash
func getKeyFromAppOrHash(s *store.Store, input string) (string, error) {
var key string
if _, err := types.NewHash(input); err == nil {
key, err = s.ResolveKey(input)
if err != nil {
return "", fmt.Errorf("cannot resolve key: %v", err)
}
} else {
app, err := discovery.NewAppFromString(input)
if err != nil {
return "", fmt.Errorf("cannot parse the image name: %v", err)
}
labels, err := types.LabelsFromMap(app.Labels)
if err != nil {
return "", fmt.Errorf("invalid labels in the name: %v", err)
}
key, err = s.GetACI(app.Name, labels)
if err != nil {
return "", fmt.Errorf("cannot find image: %v", err)
}
}
return key, nil
}
开发者ID:jsarenik,项目名称:rkt,代码行数:24,代码来源:image.go
示例14: TestPodManifest
//.........这里部分代码省略.........
Group: "0",
Environment: []types.EnvironmentVariable{
{"CAPABILITY", strconv.Itoa(int(capability.CAP_NET_BIND_SERVICE))},
},
Isolators: []types.Isolator{
{
Name: "os/linux/capabilities-retain-set",
ValueRaw: rawValue(fmt.Sprintf(`{"set":["CAP_NET_BIND_SERVICE"]}`)),
},
},
},
},
},
},
true,
fmt.Sprintf("%v=enabled", capability.CAP_NET_BIND_SERVICE.String()),
"",
},
}
for i, tt := range tests {
if tt.cgroup != "" && !cgroup.IsIsolatorSupported(tt.cgroup) {
t.Logf("Skip test #%v: cgroup %s not supported", i, tt.cgroup)
continue
}
j := 0
for name, patches := range tt.images {
imageFile := patchTestACI(name, patches...)
hash := importImageAndFetchHash(t, ctx, imageFile)
defer os.Remove(imageFile)
imgName := types.MustACIdentifier(name)
imgID, err := types.NewHash(hash)
if err != nil {
t.Fatalf("Cannot generate types.Hash from %v: %v", hash, err)
}
ra := &tt.podManifest.Apps[j]
ra.Image.Name = imgName
ra.Image.ID = *imgID
j++
}
tt.podManifest.ACKind = schema.PodManifestKind
tt.podManifest.ACVersion = schema.AppContainerVersion
manifestFile := generatePodManifestFile(t, tt.podManifest)
defer os.Remove(manifestFile)
// 1. Test 'rkt run'.
runCmd := fmt.Sprintf("%s run --mds-register=false --pod-manifest=%s", ctx.cmd(), manifestFile)
t.Logf("Running 'run' test #%v: %v", i, runCmd)
child, err := gexpect.Spawn(runCmd)
if err != nil {
t.Fatalf("Cannot exec rkt #%v: %v", i, err)
}
if tt.expectedResult != "" {
if err := expectWithOutput(child, tt.expectedResult); err != nil {
t.Fatalf("Expected %q but not found: %v", tt.expectedResult, err)
}
}
if err := child.Wait(); err != nil {
if tt.shouldSuccess {
开发者ID:squaremo,项目名称:rkt,代码行数:67,代码来源:rkt_run_pod_manifest_test.go
示例15: TestPWLOnlyParent
//.........这里部分代码省略.........
{
contents: "hello",
header: &tar.Header{
Name: "rootfs/d/file01.txt",
Size: 5,
Mode: 0700,
},
},
// The file and the directory should not appear
{
contents: "hello",
header: &tar.Header{
Name: "rootfs/e/file01.txt",
Size: 5,
Mode: 0700,
},
},
}
key1, err := newTestACI(entries, dir, ds)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
im, err := createImageManifest(imj)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
image1 := Image{Im: im, Key: key1, Level: 1}
imj = `
{
"acKind": "ImageManifest",
"acVersion": "0.1.1",
"name": "example.com/test02"
}
`
k1, _ := types.NewHash(key1)
imj, err = addDependencies(imj,
types.Dependency{
ImageName: "example.com/test01",
ImageID: k1},
)
entries = []*testTarEntry{
{
contents: imj,
header: &tar.Header{
Name: "manifest",
Size: int64(len(imj)),
},
},
{
contents: "hellohello",
header: &tar.Header{
Name: "rootfs/b/file01.txt",
Size: 10,
},
},
// New file
{
contents: "hello",
header: &tar.Header{
Name: "rootfs/c/file02.txt",
Size: 5,
},
},
}
expectedFiles := []*fileInfo{
&fileInfo{path: "manifest", typeflag: tar.TypeReg},
&fileInfo{path: "rootfs/a/file01.txt", typeflag: tar.TypeReg, size: 5},
&fileInfo{path: "rootfs/a/file02.txt", typeflag: tar.TypeReg, size: 5},
&fileInfo{path: "rootfs/b/link01.txt", typeflag: tar.TypeSymlink},
&fileInfo{path: "rootfs/b/file01.txt", typeflag: tar.TypeReg, size: 10},
&fileInfo{path: "rootfs/c", typeflag: tar.TypeDir, mode: 0700},
&fileInfo{path: "rootfs/c/file02.txt", typeflag: tar.TypeReg, size: 5},
&fileInfo{path: "rootfs/d", typeflag: tar.TypeDir, mode: 0700},
}
key2, err := newTestACI(entries, dir, ds)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
im, err = createImageManifest(imj)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
image2 := Image{Im: im, Key: key2, Level: 0}
images := Images{image2, image1}
err = checkRenderACIFromList(images, expectedFiles, ds)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
err = checkRenderACI("example.com/test02", expectedFiles, ds)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
}
开发者ID:danieltaborda,项目名称:rkt,代码行数:101,代码来源:acirenderer_test.go
示例16: TestFileOvverideDir
// Test an image with 1 dep. The upper image overrides a dir provided by a
// parent with a non-dir file.
func TestFileOvverideDir(t *testing.T) {
dir, err := ioutil.TempDir("", tstprefix)
if err != nil {
t.Fatalf("error creating tempdir: %v", err)
}
defer os.RemoveAll(dir)
ds := NewTestStore()
imj := `
{
"acKind": "ImageManifest",
"acVersion": "0.1.1",
"name": "example.com/test01"
}
`
entries := []*testTarEntry{
{
contents: imj,
header: &tar.Header{
Name: "manifest",
Size: int64(len(imj)),
},
},
{
header: &tar.Header{
Name: "rootfs/a/b",
Typeflag: tar.TypeDir,
Mode: 0700,
},
},
{
header: &tar.Header{
Name: "rootfs/a/b/c",
Typeflag: tar.TypeDir,
Mode: 0700,
},
},
{
contents: "hello",
header: &tar.Header{
Name: "rootfs/a/b/c/file01",
Size: 5,
},
},
}
key1, err := newTestACI(entries, dir, ds)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
im, err := createImageManifest(imj)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
image1 := Image{Im: im, Key: key1, Level: 1}
imj = `
{
"acKind": "ImageManifest",
"acVersion": "0.1.1",
"name": "example.com/test02"
}
`
k1, _ := types.NewHash(key1)
imj, err = addDependencies(imj,
types.Dependency{
ImageName: "example.com/test01",
ImageID: k1},
)
entries = []*testTarEntry{
{
contents: imj,
header: &tar.Header{
Name: "manifest",
Size: int64(len(imj)),
},
},
{
contents: "hellohello",
header: &tar.Header{
Name: "rootfs/a/b",
Size: 10,
},
},
}
expectedFiles := []*fileInfo{
&fileInfo{path: "manifest", typeflag: tar.TypeReg},
&fileInfo{path: "rootfs/a/b", typeflag: tar.TypeReg, size: 10},
}
key2, err := newTestACI(entries, dir, ds)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
//.........这里部分代码省略.........
开发者ID:danieltaborda,项目名称:rkt,代码行数:101,代码来源:acirenderer_test.go
示例17: Test3Deps
//.........这里部分代码省略.........
Name: "rootfs/d",
Typeflag: tar.TypeDir,
Mode: 0700,
},
},
{
contents: "hello",
header: &tar.Header{
Name: "rootfs/d/file01.txt",
Size: 5,
Mode: 0700,
},
},
}
key2, err := newTestACI(entries, dir, ds)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
im, err = createImageManifest(imj)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
image2 := Image{Im: im, Key: key2, Level: 2}
// C
imj = `
{
"acKind": "ImageManifest",
"acVersion": "0.1.1",
"name": "example.com/test02"
}
`
k2, _ := types.NewHash(key2)
imj, err = addDependencies(imj,
types.Dependency{
ImageName: "example.com/test03",
ImageID: k2},
)
entries = []*testTarEntry{
{
contents: imj,
header: &tar.Header{
Name: "manifest",
Size: int64(len(imj)),
},
},
// It should be overridden by the one provided by the upper image
{
contents: "hellohello",
header: &tar.Header{
Name: "rootfs/a/file01.txt",
Size: 10,
},
},
{
contents: "hellohello",
header: &tar.Header{
Name: "rootfs/a/file02.txt",
Size: 10,
},
},
{
contents: "hello",
header: &tar.Header{
开发者ID:danieltaborda,项目名称:rkt,代码行数:67,代码来源:acirenderer_test.go
示例18: runRmImage
func runRmImage(args []string) (exit int) {
if len(args) < 1 {
stderr("rkt: Must provide at least one image key")
return 1
}
s, err := store.NewStore(globalFlags.Dir)
if err != nil {
stderr("rkt: cannot open store: %v\n", err)
return 1
}
referencedImgs, err := getReferencedImgs(s)
if err != nil {
stderr("rkt: cannot get referenced images: %v\n", err)
return 1
}
//TODO(sgotti) Which return code to use when the removal fails only for some images?
done := 0
errors := 0
staleErrors := 0
for _, pkey := range args {
errors++
h, err := types.NewHash(pkey)
if err != nil {
stderr("rkt: wrong imageID %q: %v\n", pkey, err)
continue
}
key, err := s.ResolveKey(h.String())
if err != nil {
stderr("rkt: imageID %q not valid: %v\n", pkey, err)
continue
}
if key == "" {
stderr("rkt: imageID %q doesn't exists\n", pkey)
continue
}
err = s.RemoveACI(key)
if err != nil {
if serr, ok := err.(*store.StoreRemovalError); ok {
staleErrors++
stderr("rkt: some files cannot be removed for imageID %q: %v\n", pkey, serr)
} else {
stderr("rkt: error removing aci for imageID %q: %v\n", pkey, err)
}
continue
}
stdout("rkt: successfully removed aci for imageID: %q\n", pkey)
// Remove the treestore only if the image isn't referenced by
// some containers
// TODO(sgotti) there's a windows between getting refenced
// images and this check where a new container could be
// prepared/runned with this image. To avoid this a global lock
// is needed.
if _, ok := referencedImgs[key]; ok {
stderr("rkt: imageID is referenced by some containers, cannot remove the tree store")
continue
} else {
err = s.RemoveTreeStore(key)
if err != nil {
staleErrors++
stderr("rkt: error removing treestore for imageID %q: %v\n", pkey, err)
continue
}
}
errors--
done++
}
if done > 0 {
stdout("rkt: %d image(s) successfully removed\n", done)
}
if errors > 0 {
stdout("rkt: %d image(s) cannot be removed\n", errors)
}
if staleErrors > 0 {
stdout("rkt: %d image(s) removed but left some stale files\n", staleErrors)
}
return 0
}
开发者ID:balagopalraj,项目名称:clearlinux,代码行数:83,代码来源:rmimage.go
示例19: TestPodManifest
//.........这里部分代码省略.........
&schema.PodManifest{
Apps: []schema.RuntimeApp{
{
Name: baseAppName,
App: &types.App{
Exec: []string{"/inspect", "--print-caps-pid=0"},
User: "0",
Group: "0",
Environment: []types.EnvironmentVariable{
{"CAPABILITY", strconv.Itoa(int(capability.CAP_NET_ADMIN))},
},
Isolators: []types.Isolator{
{
Name: "os/linux/capabilities-retain-set",
ValueRaw: rawValue(fmt.Sprintf(`{"set":["CAP_NET_ADMIN"]}`)),
},
},
},
},
},
},
true,
fmt.Sprintf("%v=enabled", capability.CAP_NET_ADMIN.String()),
"",
},
}
for i, tt := range tests {
if tt.cgroup != "" && !cgroup.IsIsolatorSupported(tt.cgroup) {
t.Logf("Skip test #%v: cgroup %s not supported", i, tt.cgroup)
continue
}
var hashesToRemove []string
for j, v := range tt.images {
hash := patchImportAndFetchHash(v.name, v.patches, t, ctx)
hashesToRemove = append(hashesToRemove, hash)
imgName := types.MustACIdentifier(v.name)
imgID, err := types.NewHash(hash)
if err != nil {
t.Fatalf("Cannot generate types.Hash from %v: %v", hash, err)
}
ra := &tt.podManifest.Apps[j]
ra.Image.Name = imgName
ra.Image.ID = *imgID
}
tt.podManifest.ACKind = schema.PodManifestKind
tt.podManifest.ACVersion = schema.AppContainerVersion
manifestFile := generatePodManifestFile(t, tt.podManifest)
defer os.Remove(manifestFile)
// 1. Test 'rkt run'.
runCmd := fmt.Sprintf("%s run --mds-register=false --pod-manifest=%s", ctx.Cmd(), manifestFile)
t.Logf("Running 'run' test #%v", i)
child := spawnOrFail(t, runCmd)
if tt.expectedResult != "" {
if err := expectWithOutput(child, tt.expectedResult); err != nil {
t.Fatalf("Expected %q but not found: %v", tt.expectedResult, err)
}
}
if err := child.Wait(); err != nil {
if tt.shouldSucceed {
t.Fatalf("rkt didn't terminate correctly: %v", err)
}
}
verifyHostFile(t, tmpdir, "file", i, tt.expectedResult)
// 2. Test 'rkt prepare' + 'rkt run-prepared'.
rktCmd := fmt.Sprintf("%s --insecure-skip-verify prepare --pod-manifest=%s",
ctx.Cmd(), manifestFile)
uuid := runRktAndGetUUID(t, rktCmd)
runPreparedCmd := fmt.Sprintf("%s run-prepared --mds-register=false %s", ctx.Cmd(), uuid)
t.Logf("Running 'run-prepared' test #%v", i)
child = spawnOrFail(t, runPreparedCmd)
if tt.expectedResult != "" {
if err := expectWithOutput(child, tt.expectedResult); err != nil {
t.Fatalf("Expected %q but not found: %v", tt.expectedResult, err)
}
}
if err := child.Wait(); err != nil {
if tt.shouldSucceed {
t.Fatalf("rkt didn't terminate correctly: %v", err)
}
}
verifyHostFile(t, tmpdir, "file", i, tt.expectedResult)
// we run the garbage collector and remove the imported images to save
// space
runGC(t, ctx)
for _, h := range hashesToRemove {
removeFromCas(t, ctx, h)
}
}
}
开发者ID:kinpro,项目名称:rkt,代码行数:101,代码来源:rkt_run_pod_manifest_test.go
示例20: Write
// Write renders the ACI with the provided key in the treestore. id references
// that specific tree store rendered image.
// Write, to avoid having a rendered ACI with old stale files, requires that
// the destination directory doesn't exist (usually Remove should be called
// before Write)
func (ts *TreeStore) Write(id string, key string, s *Store) (string, error) {
treepath := ts.GetPath(id)
fi, _ := os.Stat(treepath)
if fi != nil {
return "", fmt.Errorf("treestore: path %s already exists", treepath)
}
imageID, err := types.NewHash(key)
if err != nil {
return "", fmt.Errorf("treestore: cannot convert key to imageID: %v", err)
}
if err := os.MkdirAll(treepath, 0755); err != nil {
return "", fmt.Errorf("treestore: cannot create treestore directory %s: %v", treepath, err)
}
err = aci.RenderACIWithImageID(*imageID, treepath, s, uid.NewBlankUidRange())
if err != nil {
return "", fmt.Errorf("treestore: cannot render aci: %v", err)
}
hash, err := ts.Hash(id)
if err != nil {
return "", fmt.Errorf("treestore: cannot calculate tree hash: %v", err)
}
err = ioutil.WriteFile(filepath.Join(treepath, hashfilename), []byte(hash), 0644)
if err != nil {
return "", fmt.Errorf("treestore: cannot write hash file: %v", err)
}
// before creating the "rendered" flag file we need to ensure that all data is fsynced
dfd, err := syscall.Open(treepath, syscall.O_RDONLY, 0)
if err != nil {
return "", err
}
defer syscall.Close(dfd)
if err := sys.Syncfs(dfd); err != nil {
return "", fmt.Errorf("treestore: failed to sync data: %v", err)
}
// Create rendered file
f, err := os.Create(filepath.Join(treepath, renderedfilename))
if err != nil {
return "", fmt.Errorf("treestore: failed to write rendered file: %v", err)
}
f.Close()
// Write the hash of the image that will use this tree store
err = ioutil.WriteFile(filepath.Join(treepath, imagefilename), []byte(key), 0644)
if err != nil {
return "", fmt.Errorf("treestore: cannot write image file: %v", err)
}
if err := syscall.Fsync(dfd); err != nil {
return "", fmt.Errorf("treestore: failed to sync tree store directory: %v", err)
}
treeSize, err := ts.Size(id)
if err != nil {
return "", err
}
if err := s.UpdateTreeStoreSize(key, treeSize); err != nil {
return "", err
}
return string(hash), nil
}
开发者ID:matomesc,项目名称:rkt,代码行数:67,代码来源:tree.go
注:本文中的github.com/coreos/rkt/Godeps/_workspace/src/github.com/appc/spec/schema/types.NewHash函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论