提交 f3fd7793 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!46 support import rootfs to be image

Merge pull request !46 from wangfengtu/support_import
......@@ -425,6 +425,20 @@ func (s *grpcImageService) LoadImage(ctx context.Context, req *pb.LoadImageReque
return &pb.LoadImageResponose{Outmsg: outmsg}, err
}
// Import rootfs to be image
func (s *grpcImageService) Import(ctx context.Context, req *pb.ImportRequest) (*pb.ImportResponose, error) {
id, err := importImage(s.gopts, req.File, req.Tag)
if err != nil {
return &pb.ImportResponose{
Id: id,
Errmsg: err.Error(),
Cc: 1,
}, err
}
return &pb.ImportResponose{Id: id}, err
}
func copyImageFsUsage(fsUsage []*FilesystemUsage) (pbFsUsage []*pb.FilesystemUsage) {
for _, usage := range fsUsage {
element := &pb.FilesystemUsage{
......
// Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
// iSulad-img licensed under the Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
// http://license.coscl.org.cn/MulanPSL2
// 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 v2 for more details.
// Description: iSulad image kit
// Author: wangfengtu
// Create: 2020-05-25
package main
import (
"context"
"fmt"
"os"
"github.com/containers/image/copy"
"github.com/containers/image/storage"
"github.com/containers/image/transports/alltransports"
"github.com/containers/image/types"
)
func importImage(gopts *globalOptions, input string, destTag string) (string, error) {
if input == "" {
return "", fmt.Errorf("Missing input tarball name")
}
imageService, err := getImageService(gopts)
if err != nil {
return "", fmt.Errorf("get image service failed: %v", err)
}
policyContext, err := getPolicyContext(gopts)
if err != nil {
return "", fmt.Errorf("Error loading trust policy: %v", err)
}
defer policyContext.Destroy()
store, err := getStorageStore(gopts)
if err != nil {
return "", err
}
// Make sure file exist, so we can make sure the following formated input always valid
_, err = os.Stat(input)
if err != nil {
return "", err
}
// Format: tarball:/path/rootfs.tar
formatedInput := "tarball:" + input
srcRef, err := alltransports.ParseImageName(formatedInput)
if err != nil {
return "", fmt.Errorf("Invalid input name %s: %v", formatedInput, err)
}
destRef, err := storage.Transport.ParseStoreReference(store, destTag)
if err != nil {
return "", fmt.Errorf("Invalid tag %s: %v", destTag, err)
}
_, err = copy.Image(context.Background(), policyContext, destRef, srcRef, &copy.Options{
ReportWriter: os.Stdout,
})
if err != nil {
return "", fmt.Errorf("Import rootfs %v failed: %v", input, err)
}
status, err := imageService.GetOneImage(&types.SystemContext{}, destTag)
if err != nil {
return "", err
}
fmt.Println(status.ID)
return status.ID, err
}
%global _version 2.0.0
%global _release 20200422.083956.git12ad23f0
%global _release 20200527.141725.git98f65913
Name: iSulad-img
Version: %{_version}
Release: %{_release}
......
此差异已折叠。
......@@ -55,6 +55,8 @@ service ImageService {
rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {}
// Load image from file
rpc LoadImage(LoadImageRequest) returns (LoadImageResponose) {}
// Import rootfs to be image
rpc Import(ImportRequest) returns (ImportResponose) {}
// isulad image services
// get all Container rootfs
......@@ -142,6 +144,17 @@ message LoadImageResponose {
uint32 cc = 3;
}
message ImportRequest {
string file = 1;
string tag = 2;
}
message ImportResponose {
string id = 1;
string errmsg = 2;
uint32 cc = 3;
}
message GraphdriverStatusRequest {}
message GraphdriverStatusResponse {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册