func (r *FakeImageService) ImageStatus(image *runtimeApi.ImageSpec) (*runtimeApi.Image, error) { r.Lock() defer r.Unlock() r.Called = append(r.Called, "ImageStatus") return r.Images[image.GetImage()], nil }
// ImageStatus returns the status of the image, returns nil if the image doesn't present. func (ds *dockerService) ImageStatus(image *runtimeapi.ImageSpec) (*runtimeapi.Image, error) { imageInspect, err := ds.client.InspectImageByRef(image.GetImage()) if err != nil { if dockertools.IsImageNotFoundError(err) { return nil, nil } return nil, err } return imageInspectToRuntimeAPIImage(imageInspect) }
func (r *FakeImageService) RemoveImage(image *runtimeApi.ImageSpec) error { r.Lock() defer r.Unlock() r.Called = append(r.Called, "RemoveImage") // Remove the image delete(r.Images, image.GetImage()) return nil }
func (r *FakeImageService) ImageStatus(image *runtimeApi.ImageSpec) (*runtimeApi.Image, error) { r.Lock() defer r.Unlock() r.Called = append(r.Called, "ImageStatus") if img, ok := r.Images[image.GetImage()]; ok { return img, nil } return nil, fmt.Errorf("image %q not found", image.GetImage()) }
// PullImage pulls an image with authentication config. func (ds *dockerService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig) error { return ds.client.PullImage(image.GetImage(), dockertypes.AuthConfig{ Username: auth.GetUsername(), Password: auth.GetPassword(), ServerAddress: auth.GetServerAddress(), IdentityToken: auth.GetIdentityToken(), RegistryToken: auth.GetRegistryToken(), }, dockertypes.ImagePullOptions{}, ) }
// PullImage pulls a image with authentication config. func (ds *dockerService) PullImage(image *runtimeApi.ImageSpec, auth *runtimeApi.AuthConfig) error { // TODO: add default tags for images or should this be done by kubelet? return ds.client.PullImage(image.GetImage(), dockertypes.AuthConfig{ Username: auth.GetUsername(), Password: auth.GetPassword(), ServerAddress: auth.GetServerAddress(), IdentityToken: auth.GetIdentityToken(), RegistryToken: auth.GetRegistryToken(), }, dockertypes.ImagePullOptions{}, ) }
// RemoveImage removes the image. func (r *RemoteImageService) RemoveImage(image *runtimeapi.ImageSpec) error { ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() _, err := r.imageClient.RemoveImage(ctx, &runtimeapi.RemoveImageRequest{ Image: image, }) if err != nil { glog.Errorf("RemoveImage %q from image service failed: %v", image.GetImage(), err) return err } return nil }
// ImageStatus returns the status of the image. func (r *RemoteImageService) ImageStatus(image *runtimeapi.ImageSpec) (*runtimeapi.Image, error) { ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() resp, err := r.imageClient.ImageStatus(ctx, &runtimeapi.ImageStatusRequest{ Image: image, }) if err != nil { glog.Errorf("ImageStatus %q from image service failed: %v", image.GetImage(), err) return nil, err } return resp.Image, nil }
func (r *FakeImageService) PullImage(image *runtimeApi.ImageSpec, auth *runtimeApi.AuthConfig) error { r.Lock() defer r.Unlock() r.Called = append(r.Called, "PullImage") // ImageID should be randomized for real container runtime, but here just use // image's name for easily making fake images. imageID := image.GetImage() if _, ok := r.Images[imageID]; !ok { r.Images[imageID] = r.makeFakeImage(image.GetImage()) } return nil }
// PullImage pulls an image with authentication config. func (r *RemoteImageService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig) (string, error) { ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() resp, err := r.imageClient.PullImage(ctx, &runtimeapi.PullImageRequest{ Image: image, Auth: auth, }) if err != nil { glog.Errorf("PullImage %q from image service failed: %v", image.GetImage(), err) return "", err } return resp.GetImageRef(), nil }
// RemoveImage removes the image. func (ds *dockerService) RemoveImage(image *runtimeapi.ImageSpec) error { // If the image has multiple tags, we need to remove all the tags // TODO: We assume image.Image is image ID here, which is true in the current implementation // of kubelet, but we should still clarify this in CRI. imageInspect, err := ds.client.InspectImageByID(image.GetImage()) if err == nil && imageInspect != nil && len(imageInspect.RepoTags) > 1 { for _, tag := range imageInspect.RepoTags { if _, err := ds.client.RemoveImage(tag, dockertypes.ImageRemoveOptions{PruneChildren: true}); err != nil { return err } } return nil } _, err = ds.client.RemoveImage(image.GetImage(), dockertypes.ImageRemoveOptions{PruneChildren: true}) return err }
// PullImage pulls an image with authentication config. func (ds *dockerService) PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig) (string, error) { err := ds.client.PullImage(image.GetImage(), dockertypes.AuthConfig{ Username: auth.GetUsername(), Password: auth.GetPassword(), ServerAddress: auth.GetServerAddress(), IdentityToken: auth.GetIdentityToken(), RegistryToken: auth.GetRegistryToken(), }, dockertypes.ImagePullOptions{}, ) if err != nil { return "", err } return dockertools.GetImageRef(ds.client, image.GetImage()) }
// RemoveImage removes the image. func (ds *dockerService) RemoveImage(image *runtimeApi.ImageSpec) error { _, err := ds.client.RemoveImage(image.GetImage(), dockertypes.ImageRemoveOptions{PruneChildren: true}) return err }