MCPcopy Index your code
hub / github.com/linuxkit/linuxkit / Pull

Method Pull

src/cmd/linuxkit/cache/pull.go:162–235  ·  view source on GitHub ↗

Pull pull a reference, whether it points to an arch-specific image or to an index. If an index, optionally, try to pull its individual named references as well.

(name string, withArchReferences bool)

Source from the content-addressed store, hash-verified

160// Pull pull a reference, whether it points to an arch-specific image or to an index.
161// If an index, optionally, try to pull its individual named references as well.
162func (p *Provider) Pull(name string, withArchReferences bool) error {
163 var (
164 err error
165 )
166 fullname := util.ReferenceExpand(name, util.ReferenceWithTag())
167 ref, err := namepkg.ParseReference(fullname)
168 if err != nil {
169 return err
170 }
171 v1ref, err := reference.Parse(ref.String())
172 if err != nil {
173 return err
174 }
175
176 // before we even try to push, let us see if it exists remotely
177 remoteOptions := []remote.Option{remote.WithAuthFromKeychain(authn.DefaultKeychain)}
178
179 desc, err := registry.GetRemote().Get(ref, remoteOptions...)
180 if err != nil {
181 return fmt.Errorf("error getting manifest for trusted image %s: %v", name, err)
182 }
183
184 // lock the cache so we can write to it
185 if err := p.Lock(); err != nil {
186 return fmt.Errorf("unable to lock cache for writing: %v", err)
187 }
188 defer p.Unlock()
189
190 // first attempt as an index
191 ii, err := desc.ImageIndex()
192 if err == nil {
193 log.Debugf("ImageWrite retrieved %s is index, saving", fullname)
194
195 if err := p.cache.WriteIndex(ii); err != nil {
196 return fmt.Errorf("unable to write index: %v", err)
197 }
198 if err := p.DescriptorWrite(v1ref.String(), desc.Descriptor); err != nil {
199 return fmt.Errorf("unable to write index descriptor to cache: %v", err)
200 }
201 if withArchReferences {
202 im, err := ii.IndexManifest()
203 if err != nil {
204 return fmt.Errorf("unable to get IndexManifest: %v", err)
205 }
206 for _, m := range im.Manifests {
207 if m.MediaType.IsImage() && m.Platform != nil && m.Platform.Architecture != unknown && m.Platform.OS != unknown {
208 archSpecific := fmt.Sprintf("%s-%s", ref.String(), m.Platform.Architecture)
209 if _, err := reference.Parse(archSpecific); err != nil {
210 return fmt.Errorf("unable to parse arch-specific reference %s: %v", archSpecific, err)
211 }
212 if err := p.DescriptorWrite(archSpecific, m); err != nil {
213 return fmt.Errorf("unable to write index descriptor to cache: %v", err)
214 }
215 }
216 }
217 }
218 } else {
219 var im v1.Image

Callers 1

cachePullCmdFunction · 0.95

Implementers 11

ProviderCDROMpkg/metadata/provider_cdrom.go
ProviderGCPpkg/metadata/provider_gcp.go
ProviderVMwarepkg/metadata/provider_vmware_unsupport
ProviderEquinixMetalpkg/metadata/provider_equinixmetal.go
ProviderVultrpkg/metadata/provider_vultr.go
ProviderDigitalOceanpkg/metadata/provider_digitalocean.go
ProviderHetznerpkg/metadata/provider_hetzner.go
ProviderMetaldatapkg/metadata/provider_metaldata.go
ProviderOpenstackpkg/metadata/provider_openstack.go
ProviderScalewaypkg/metadata/provider_scaleway.go
ProviderAWSpkg/metadata/provider_aws.go

Calls 8

LockMethod · 0.95
UnlockMethod · 0.95
DescriptorWriteMethod · 0.95
WriteIndexMethod · 0.80
StringMethod · 0.65
ImageIndexMethod · 0.65
ImageMethod · 0.65
GetMethod · 0.45

Tested by

no test coverage detected