func (h *Host) TrustKey(prefix types.ACIdentifier, location, fingerprint string) error { if location == "" { if prefix == keystore.Root { return errors.New("Cannot discover root key!") } location = prefix.String() } _, kf, err := fetch.OpenPubKey(location) if err != nil { return errors.Trace(err) } defer kf.Close() path, err := h.Keystore().StoreTrustedKey(prefix, kf, fingerprint) if err != nil { return errors.Trace(err) } if path == "" { h.ui.Println("Key NOT accepted") } else { h.ui.Printf("Key accepted and saved as %v\n", path) } return nil }
func (ts *TestStore) GetACI(name types.ACIdentifier, labels types.Labels) (string, error) { for _, aci := range ts.acis { if aci.ImageManifest.Name.String() == name.String() { return aci.key, nil } } return "", fmt.Errorf("aci not found") }
func (ms *conversionStore) GetACI(name types.ACIdentifier, labels types.Labels) (string, error) { for _, aci := range ms.acis { // we implement this function to comply with the interface so don't // bother implementing a proper label check if aci.ImageManifest.Name.String() == name.String() { return aci.key, nil } } return "", fmt.Errorf("aci not found") }
func imageNameToAppName(name types.ACIdentifier) (*types.ACName, error) { parts := strings.Split(name.String(), "/") last := parts[len(parts)-1] sn, err := types.SanitizeACName(last) if err != nil { return nil, err } return types.MustACName(sn), nil }
// GetACI retrieves the ACI that best matches the provided app name and labels. // The returned value is the blob store key of the retrieved ACI. // If there are multiple matching ACIs choose the latest one (defined as the // last one imported in the store). // If no version label is requested, ACIs marked as latest in the ACIInfo are // preferred. func (s Store) GetACI(name types.ACIdentifier, labels types.Labels) (string, error) { var curaciinfo *ACIInfo versionRequested := false if _, ok := labels.Get("version"); ok { versionRequested = true } var aciinfos []*ACIInfo err := s.db.Do(func(tx *sql.Tx) error { var err error aciinfos, _, err = GetACIInfosWithAppName(tx, name.String()) return err }) if err != nil { return "", err } nextKey: for _, aciinfo := range aciinfos { im, err := s.GetImageManifest(aciinfo.BlobKey) if err != nil { return "", fmt.Errorf("error getting image manifest: %v", err) } // The image manifest must have all the requested labels for _, l := range labels { ok := false for _, rl := range im.Labels { if l.Name == rl.Name && l.Value == rl.Value { ok = true break } } if !ok { continue nextKey } } if curaciinfo != nil { // If no version is requested prefer the acis marked as latest if !versionRequested { if !curaciinfo.Latest && aciinfo.Latest { curaciinfo = aciinfo continue nextKey } if curaciinfo.Latest && !aciinfo.Latest { continue nextKey } } // If multiple matching image manifests are found, choose the latest imported in the cas. if aciinfo.ImportTime.After(curaciinfo.ImportTime) { curaciinfo = aciinfo } } else { curaciinfo = aciinfo } } if curaciinfo != nil { return curaciinfo.BlobKey, nil } return "", fmt.Errorf("aci not found") }