提交 a9b485a9 编写于 作者: W WangFengTu

support tag image

Signed-off-by: NWangFengTu <wangfengtu@huawei.com>
上级 2f9371a0
......@@ -752,3 +752,24 @@ func (s *grpcImageService) ListContainers(ctx context.Context, req *pb.ListConta
return &pb.ListContainersResponse{Containers: containers}, nil
}
func (s *grpcImageService) TagImage(ctx context.Context, req *pb.TagImageRequest) (*pb.TagImageResponse, error) {
if req == nil || req.SrcName == nil || req.SrcName.Image == "" ||
req.DestName == nil || req.DestName.Image == "" {
err := errors.New("Lack infomation for tag image")
return &pb.TagImageResponse{
Errmsg: err.Error(),
Cc: 1,
}, err
}
err := imageTag(s.gopts, req.SrcName.Image, req.DestName.Image)
if err != nil {
return &pb.TagImageResponse{
Errmsg: err.Error(),
Cc: 1,
}, err
}
return &pb.TagImageResponse{}, nil
}
......@@ -154,6 +154,8 @@ type ImageServer interface {
ParseImageNames(imageName string) ([]parsedImageNames, error)
// IsSecureIndex check if indexName is insecure
IsSecureIndex(indexName string) bool
// Tag image to other name
Tag(srcName, destName string) error
}
func (svc *imageService) InitImage(image parsedImageNames, options *copy.Options) (types.Image, error) {
......@@ -329,6 +331,19 @@ func (svc *imageService) UnrefImage(systemContext *types.SystemContext, imageNam
return ref.DeleteImage(svc.ctx, systemContext)
}
func (svc *imageService) Tag(srcName, destName string) error {
ref, err := svc.parseImageName(srcName)
if err != nil {
return err
}
img, err := imstorage.Transport.GetStoreImage(svc.store, ref)
if err != nil {
return err
}
return svc.store.AddName(img.ID, destName)
}
func (svc *imageService) GetStore() storage.Store {
return svc.store
}
......
// Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved.
// iSulad-img licensed under the Mulan PSL v1.
// You can use this software according to the terms and conditions of the Mulan PSL v1.
// You may obtain a copy of Mulan PSL v1 at:
// http://license.coscl.org.cn/MulanPSL
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
// PURPOSE.
// See the Mulan PSL v1 for more details.
// Description: iSulad image img
// Author: wangfengtu
// Create: 2020-04-15
package main
import (
"github.com/sirupsen/logrus"
)
func imageTag(gopts *globalOptions, srcName string, destName string) error {
imageService, err := getImageService(gopts)
if err != nil {
return err
}
err = imageService.Tag(srcName, destName)
if err != nil {
logrus.Debugf("error tagging image %v to %v: %v", srcName, destName, err)
return err
}
return err
}
此差异已折叠。
......@@ -86,6 +86,9 @@ service ImageService {
// health check service
rpc HealthCheck(HealthCheckRequest) returns (HealthCheckResponse) {}
// Add a tag to the image
rpc TagImage(TagImageRequest) returns (TagImageResponse) {}
}
message HealthCheckRequest {}
......@@ -581,3 +584,13 @@ message ImageFsInfoResponse {
string errmsg = 2;
uint32 cc = 3;
}
message TagImageRequest {
ImageSpec srcName = 1;
ImageSpec destName = 2;
}
message TagImageResponse {
string errmsg = 1;
uint32 cc = 2;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册