From 7916ece5ef8552594e01ee5a846265d904a72af0 Mon Sep 17 00:00:00 2001 From: wangkang101 <873229877@qq.com> Date: Tue, 1 Sep 2020 15:56:31 +0800 Subject: [PATCH] remove useless flag Signed-off-by: wangkang101 <873229877@qq.com> --- Makefile | 5 +- README.md | 1 - flags.go | 5 - main.go | 16 +-- {transform => pkg/isulad}/isulad.go | 21 ++-- {transform => pkg/isulad}/isulad_test.go | 15 +-- {transform => pkg/isulad}/lcr.go | 2 +- pkg/isulad/storage.go | 145 ++++++++++++++++++++++ {transform => pkg/isulad}/storage_test.go | 8 +- transform/docker/docker.go | 19 +-- transform/docker/docker_test.go | 11 +- transform/storage.go | 121 ------------------ 12 files changed, 196 insertions(+), 173 deletions(-) rename {transform => pkg/isulad}/isulad.go (92%) rename {transform => pkg/isulad}/isulad_test.go (94%) rename {transform => pkg/isulad}/lcr.go (98%) create mode 100644 pkg/isulad/storage.go rename {transform => pkg/isulad}/storage_test.go (98%) diff --git a/Makefile b/Makefile index f3703ed..c255abd 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ BEP_DIR=/tmp/isula-transform-build-bep BEP_FLAGS=-tmpdir=$(BEP_DIR) TAGS="cgo static_build" -LDFLAGS="-s -w -buildid=IdByiSula -buildmode=pie -extldflags=-zrelro -extldflags=-znow $(BEP_FLAGS) -X main.version=$(VERSION) -X main.gitCommit=${COMMIT}" +LDFLAGS="-buildid=IdByiSula -extldflags=-zrelro -extldflags=-znow $(BEP_FLAGS) -X main.version=$(VERSION) -X main.gitCommit=${COMMIT}" ENV=CGO_ENABLED=1 GOMOD_ENV=GO111MODULE=on @@ -20,8 +20,7 @@ bep: .PHONY: localbuild localbuild: bep - @go mod vendor - $(ENV) $(GOMOD_ENV) go build -tags $(TAGS) -ldflags $(LDFLAGS) -mod=vendor -o bin/$(NAME) . + $(ENV) $(GOMOD_ENV) go build -mod=vendor -buildmode=pie -tags $(TAGS) -ldflags $(LDFLAGS) -o bin/$(NAME) . @rm -rf $(BEP_DIR) .PHONY: bin diff --git a/README.md b/README.md index 969f70e..0ea023a 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,6 @@ COMMANDS: GLOBAL OPTIONS: --log value specific output log file path (default: "/var/log/isula-kits/transform.log") --log-level value Customize the level of logging for collection, allowed: debug, info, warn, error (default: "info") - --isulad-config-file value iSulad configuration file path (default: "/etc/isulad/daemon.json") --docker-graph value graph root of docker (default: "/var/lib/docker") --docker-state value state root of docker (default: "/var/run/docker") --all transform all containers diff --git a/flags.go b/flags.go index 2e421f3..8483fd1 100644 --- a/flags.go +++ b/flags.go @@ -31,11 +31,6 @@ var basicFlags = []cli.Flag{ Value: "docker", Hidden: true, }, - cli.StringFlag{ - Name: "isulad-config-file", - Usage: "iSulad configuration file path", - Value: "/etc/isulad/daemon.json", - }, } var dockerFlags = []cli.Flag{ diff --git a/main.go b/main.go index 40e58d5..f6f10d3 100644 --- a/main.go +++ b/main.go @@ -24,6 +24,7 @@ import ( "github.com/sirupsen/logrus" "github.com/urfave/cli" "gopkg.in/natefinch/lumberjack.v2" + "isula.org/isula-transform/pkg/isulad" "isula.org/isula-transform/transform" _ "isula.org/isula-transform/transform/register" "isula.org/isula-transform/utils" @@ -36,6 +37,8 @@ const ( maxConcurrentTransform = 128 maxPerLogFileSize = 10 // megabytes + + isuladConfFIle = "/etc/isulad/daemon.json" ) var ( @@ -117,30 +120,29 @@ func transformInit(ctx *cli.Context) error { StorageDriver string `json:"storage-driver"` ImageServer string `json:"image-server-sock-addr"` }{} - iSuladCfgFile := ctx.GlobalString("isulad-config-file") - if err := utils.CheckFileValid(iSuladCfgFile); err != nil { + if err := utils.CheckFileValid(isuladConfFIle); err != nil { return errors.Wrapf(err, "check isulad daemon config failed") } - iSuladCfgData, err := ioutil.ReadFile(iSuladCfgFile) + iSuladCfgData, err := ioutil.ReadFile(isuladConfFIle) if err != nil { - logrus.Errorf("read isulad daemon config failed: %v, file path: %s", err, iSuladCfgFile) + logrus.Errorf("read isulad daemon config failed: %v, file path: %s", err, isuladConfFIle) return errors.Wrapf(err, "read isulad daemon config failed") } err = json.Unmarshal(iSuladCfgData, &iSuladCfg) if err != nil { - logrus.Errorf("unmarshal isulad daemon config failed: %v, file path: %s", err, iSuladCfgFile) + logrus.Errorf("unmarshal isulad daemon config failed: %v, file path: %s", err, isuladConfFIle) return errors.Wrapf(err, "unmarshal isulad daemon config failed") } logrus.Debugf("isulad daemon config: %+v", iSuladCfg) - err = transform.InitIsuladTool(iSuladCfg.Graph, iSuladCfg.Runtime, iSuladCfg.StorageDriver, iSuladCfg.ImageServer) + err = isulad.InitIsuladTool(iSuladCfg.Graph, iSuladCfg.Runtime, iSuladCfg.StorageDriver, iSuladCfg.ImageServer) if err != nil { return errors.Wrapf(err, "transform init failed") } if iSuladCfg.LogDriver != "file" { logrus.Infof("isula daemon log driver is %s, can't redirect to file", iSuladCfg.LogDriver) } else { - transform.LcrLogInit(iSuladCfg.State, iSuladCfg.Runtime, iSuladCfg.LogLevel) + isulad.LcrLogInit(iSuladCfg.State, iSuladCfg.Runtime, iSuladCfg.LogLevel) } return nil } diff --git a/transform/isulad.go b/pkg/isulad/isulad.go similarity index 92% rename from transform/isulad.go rename to pkg/isulad/isulad.go index e7b8149..36b2d9a 100644 --- a/transform/isulad.go +++ b/pkg/isulad/isulad.go @@ -10,7 +10,7 @@ * Create: 2020-04-24 */ -package transform +package isulad import ( "encoding/json" @@ -24,6 +24,7 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/sys/unix" + "isula.org/isula-transform/transform" "isula.org/isula-transform/types" ) @@ -50,8 +51,8 @@ type IsuladTool struct { runtime string // storage - storageType StorageType - storageDriver BaseStorageDriver + storageType transform.StorageType + storageDriver transform.BaseStorageDriver } func init() { @@ -72,7 +73,7 @@ func InitIsuladTool(graphRoot, runtime, storageDriver, imageSrvAddr string) erro commonTool = &IsuladTool{ graphRoot: graphRoot, runtime: runtime, - storageType: StorageType(storageDriver), + storageType: transform.StorageType(storageDriver), } if err := checkToolConfigValid(); err != nil { @@ -85,18 +86,18 @@ func InitIsuladTool(graphRoot, runtime, storageDriver, imageSrvAddr string) erro return errors.Wrap(err, "init global base storage driver failed") } - commonTool.storageDriver = gBaseStorageDriver + commonTool.storageDriver = globalIsuladStorageDriver return nil } // GetIsuladCfgTool returns the global isuladtool -func GetIsuladCfgTool() *IsuladTool { +func GetIsuladTool() *IsuladTool { return commonTool } func checkToolConfigValid() error { - g := GetIsuladCfgTool() + g := GetIsuladTool() // runtime switch g.runtime { case defaultRuntime: @@ -105,7 +106,7 @@ func checkToolConfigValid() error { } // storage driver switch g.storageType { - case Overlay2, DeviceMapper: + case transform.Overlay2, transform.DeviceMapper: default: return fmt.Errorf("not support storage driver: %s", g.runtime) } @@ -113,12 +114,12 @@ func checkToolConfigValid() error { } // StorageType returns the storage type of isulad -func (ict *IsuladTool) StorageType() StorageType { +func (ict *IsuladTool) StorageType() transform.StorageType { return ict.storageType } // BaseStorageDriver returns the global base storage driver tool -func (ict *IsuladTool) BaseStorageDriver() BaseStorageDriver { +func (ict *IsuladTool) BaseStorageDriver() transform.BaseStorageDriver { return ict.storageDriver } diff --git a/transform/isulad_test.go b/pkg/isulad/isulad_test.go similarity index 94% rename from transform/isulad_test.go rename to pkg/isulad/isulad_test.go index 6fa646f..3ab50c0 100644 --- a/transform/isulad_test.go +++ b/pkg/isulad/isulad_test.go @@ -10,7 +10,7 @@ * Create: 2020-04-24 */ -package transform +package isulad import ( "io/ioutil" @@ -20,6 +20,7 @@ import ( . "github.com/smartystreets/goconvey/convey" "golang.org/x/sys/unix" + "isula.org/isula-transform/transform" "isula.org/isula-transform/types" ) @@ -28,7 +29,7 @@ const itTestCtrID = "isulatransformittestctr" var testIsuladTool = &IsuladTool{ graphRoot: "/var/lib/isulad", runtime: "lcr", - storageType: Overlay2, + storageType: transform.Overlay2, } func TestInitIsuladTool(t *testing.T) { @@ -47,10 +48,10 @@ func TestInitIsuladTool(t *testing.T) { Convey("default init", func() { So(InitIsuladTool("", "", "", ""), ShouldBeNil) - So(GetIsuladCfgTool().graphRoot, ShouldEqual, testIsuladTool.graphRoot) - So(GetIsuladCfgTool().runtime, ShouldEqual, testIsuladTool.runtime) - So(GetIsuladCfgTool().storageType, ShouldEqual, testIsuladTool.storageType) - So(GetIsuladCfgTool().storageDriver, ShouldNotBeNil) + So(GetIsuladTool().graphRoot, ShouldEqual, testIsuladTool.graphRoot) + So(GetIsuladTool().runtime, ShouldEqual, testIsuladTool.runtime) + So(GetIsuladTool().storageType, ShouldEqual, testIsuladTool.storageType) + So(GetIsuladTool().storageDriver, ShouldNotBeNil) }) }) } @@ -58,7 +59,7 @@ func TestInitIsuladTool(t *testing.T) { func TestIsuladTool_GetterFunc(t *testing.T) { Convey("TestIsuladTool_GetterFunc", t, func() { Convey("StorageType", func() { - So(testIsuladTool.StorageType(), ShouldEqual, Overlay2) + So(testIsuladTool.StorageType(), ShouldEqual, transform.Overlay2) }) Convey("BaseStorageDriver", func() { diff --git a/transform/lcr.go b/pkg/isulad/lcr.go similarity index 98% rename from transform/lcr.go rename to pkg/isulad/lcr.go index 704bb0c..00161e4 100644 --- a/transform/lcr.go +++ b/pkg/isulad/lcr.go @@ -10,7 +10,7 @@ * Create: 2020-04-24 */ -package transform +package isulad /* #cgo LDFLAGS: -L/usr/lib64 -llcr -llxc diff --git a/pkg/isulad/storage.go b/pkg/isulad/storage.go new file mode 100644 index 0000000..2ac44db --- /dev/null +++ b/pkg/isulad/storage.go @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2020 Huawei Technologies Co., Ltd. + * isula-transform is licensed under 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. + * Create: 2020-04-24 + */ + +package isulad + +import ( + "context" + "fmt" + "net" + "strings" + "time" + + "github.com/sirupsen/logrus" + "google.golang.org/grpc" + "isula.org/isula-transform/api/isula" + "isula.org/isula-transform/transform" +) + +const ( + defaultAddress = "unix:///var/run/isuald/isula_image.sock" + isuladImgTimeout = 10 * time.Second +) + +var ( + globalIsuladStorageDriver transform.BaseStorageDriver +) + +type isuladStorageDriver struct { + imgClient isula.ImageServiceClient +} + +func initBaseStorageDriver(addr string) error { + client, err := newIsuladImgClient(addr) + if err != nil { + return err + } + globalIsuladStorageDriver = &isuladStorageDriver{imgClient: client} + return nil +} + +// GenerateRootFs returns a new rootfs path of container +func (sd *isuladStorageDriver) GenerateRootFs(id, image string) (string, error) { + req := &isula.ContainerPrepareRequest{ + Image: image, + Id: id, + Name: id, + } + resp, err := sd.imgClient.ContainerPrepare(context.Background(), req) + if err != nil { + return "", err + } + if msg := resp.GetErrmsg(); msg != "" { + removeReq := &isula.ContainerRemoveRequest{ + NameId: id, + } + rResp, rErr := sd.imgClient.ContainerRemove(context.Background(), removeReq) + logrus.Infof("isulad-img remove container: %v, err: %v", rResp, rErr) + return "", fmt.Errorf("isulad-img prepare failed: %s", msg) + } + return resp.MountPoint, nil +} + +// CleanupRootFs cleans up container data storaged in the isulad +func (sd *isuladStorageDriver) CleanupRootFs(id string) { + req := &isula.ContainerRemoveRequest{ + NameId: id, + } + // During the rollback, only information is collected + _, err := sd.imgClient.ContainerRemove(context.Background(), req) + if err != nil { + logrus.Warnf("isulad-img remove container %s: %v", id, err) + } else { + logrus.Infof("isulad-img remove container %s successful", id) + } +} + +// MountRootFs mounts the rw layer of container +func (sd *isuladStorageDriver) MountRootFs(id string) error { + req := &isula.ContainerMountRequest{ + NameId: id, + } + resp, err := sd.imgClient.ContainerMount(context.Background(), req) + if err != nil { + return err + } + if msg := resp.GetErrmsg(); msg != "" { + return fmt.Errorf("isulad-img mount failed: %s", msg) + } + return nil +} + +// UmountRootFs umounts the rw layer of container +func (sd *isuladStorageDriver) UmountRootFs(id string) error { + req := &isula.ContainerUmountRequest{ + NameId: id, + } + resp, err := sd.imgClient.ContainerUmount(context.Background(), req) + if err != nil { + return err + } + if msg := resp.GetErrmsg(); msg != "" { + req.Force = true + fResp, fErr := sd.imgClient.ContainerUmount(context.Background(), req) + logrus.Infof("isulad-img force umount container: %v, err: %v", fResp, fErr) + if fErr == nil && fResp.GetErrmsg() == "" { + return nil + } + return fmt.Errorf("isulad-img umount failed: %s", msg) + } + return nil +} + +func dialOpt(ctx context.Context, addr string) (net.Conn, error) { + // dialer to support unix dial + dialer := func(addr string, timeout time.Duration) (net.Conn, error) { + proto, address := "unix", strings.TrimPrefix(addr, "unix://") + return net.DialTimeout(proto, address, timeout) + } + if deadline, ok := ctx.Deadline(); ok { + return dialer(addr, time.Until(deadline)) + } + return dialer(addr, isuladImgTimeout) +} + +func newIsuladImgClient(addr string, opts ...grpc.DialOption) (isula.ImageServiceClient, error) { + if addr == "" { + addr = defaultAddress + } + opts = append(opts, grpc.WithInsecure(), grpc.WithContextDialer(dialOpt)) + conn, err := grpc.Dial(addr, opts...) + if err != nil { + return nil, err + } + + return isula.NewImageServiceClient(conn), nil +} diff --git a/transform/storage_test.go b/pkg/isulad/storage_test.go similarity index 98% rename from transform/storage_test.go rename to pkg/isulad/storage_test.go index 7d5b157..f08ef6a 100644 --- a/transform/storage_test.go +++ b/pkg/isulad/storage_test.go @@ -10,7 +10,7 @@ * Create: 2020-04-24 */ -package transform +package isulad import ( "context" @@ -29,7 +29,7 @@ const ( func TestBaseStorageDriverCreate(t *testing.T) { ic := new(mockImgClient) - sd := baseStorageDriver{imgClient: ic} + sd := isuladStorageDriver{imgClient: ic} ic.remove = func(ctx context.Context, in *isula.ContainerRemoveRequest, opts ...grpc.CallOption) (*isula.ContainerRemoveResponse, error) { return &isula.ContainerRemoveResponse{Errmsg: "remove no error"}, nil } @@ -70,7 +70,7 @@ func TestBaseStorageDriverCreate(t *testing.T) { func TestBaseStorageDriver_MountRootFs(t *testing.T) { ic := new(mockImgClient) - sd := baseStorageDriver{imgClient: ic} + sd := isuladStorageDriver{imgClient: ic} Convey("TestBaseStorageDriver_MountRootFs", t, func() { Convey("mount return err", func() { errContent := "err: image client mount failed" @@ -104,7 +104,7 @@ func TestBaseStorageDriver_MountRootFs(t *testing.T) { func TestBaseStorageDriver_UmountRootFs(t *testing.T) { ic := new(mockImgClient) - sd := baseStorageDriver{imgClient: ic} + sd := isuladStorageDriver{imgClient: ic} Convey("TestBaseStorageDriver_UmountRootFs", t, func() { Convey("umount return err", func() { errContent := "err: image client umount failed" diff --git a/transform/docker/docker.go b/transform/docker/docker.go index 0b547eb..85cd5d9 100644 --- a/transform/docker/docker.go +++ b/transform/docker/docker.go @@ -36,6 +36,7 @@ import ( "github.com/sirupsen/logrus" "github.com/urfave/cli" "golang.org/x/sys/unix" + "isula.org/isula-transform/pkg/isulad" "isula.org/isula-transform/transform" "isula.org/isula-transform/types" "isula.org/isula-transform/utils" @@ -199,7 +200,7 @@ func (t *dockerTransformer) transform(id string, rb *rollback) error { } // init - iSulad := transform.GetIsuladCfgTool() + iSulad := isulad.GetIsuladTool() retErr = iSulad.PrepareBundleDir(id) if retErr != nil { logrus.Errorf("prepare bundle dir failed: %v", retErr) @@ -322,7 +323,7 @@ func (t *dockerTransformer) transformHostConfig(id string) (*types.IsuladHostCon } // reconcile and save - iSulad := transform.GetIsuladCfgTool() + iSulad := isulad.GetIsuladTool() reconcileHostConfig(&isuladHostCfg, iSulad.Runtime()) err = iSulad.SaveConfig(id, &isuladHostCfg, iSulad.MarshalIndent, iSulad.GetHostCfgPath) if err != nil { @@ -367,7 +368,7 @@ func (t *dockerTransformer) transformV2Config(id string, opts ...v2ConfigReconci State: &iSuladState, } - iSulad = transform.GetIsuladCfgTool() + iSulad = isulad.GetIsuladTool() ) // load @@ -454,7 +455,7 @@ func (t *dockerTransformer) transformOciConfig(id string, reconcileOciConfig(&ociConfig, commonCfg, hostCfg) // save - iSulad := transform.GetIsuladCfgTool() + iSulad := isulad.GetIsuladTool() err = iSulad.SaveConfig(id, &ociConfig, iSulad.MarshalIndent, iSulad.GetOciConfigPath) if err != nil { logrus.Errorf("save v2 config to file %s failed", iSulad.GetOciConfigPath(id)) @@ -465,15 +466,15 @@ func (t *dockerTransformer) transformOciConfig(id string, } func (t *dockerTransformer) initStorageDriver() (transform.StorageDriver, error) { - isulad := transform.GetIsuladCfgTool() - switch isulad.StorageType() { + iSulad := isulad.GetIsuladTool() + switch iSulad.StorageType() { case transform.Overlay2: - return newOverlayDriver(isulad.BaseStorageDriver()), nil + return newOverlayDriver(iSulad.BaseStorageDriver()), nil case transform.DeviceMapper: - return newDeviceMapperDriver(isulad.BaseStorageDriver(), t.client), nil + return newDeviceMapperDriver(iSulad.BaseStorageDriver(), t.client), nil default: } - return nil, fmt.Errorf("unsupported storage driver type: %s", isulad.StorageType()) + return nil, fmt.Errorf("unsupported storage driver type: %s", iSulad.StorageType()) } func (t *dockerTransformer) initContainers() error { diff --git a/transform/docker/docker_test.go b/transform/docker/docker_test.go index c70ba84..5ba3fa0 100644 --- a/transform/docker/docker_test.go +++ b/transform/docker/docker_test.go @@ -30,6 +30,7 @@ import ( "github.com/opencontainers/runtime-spec/specs-go" . "github.com/smartystreets/goconvey/convey" "github.com/urfave/cli" + "isula.org/isula-transform/pkg/isulad" "isula.org/isula-transform/transform" "isula.org/isula-transform/types" ) @@ -277,7 +278,7 @@ func Test_dockerConfigEngine_transformOciConfig(t *testing.T) { Convey("transform successfully", func() { var ( - basePath = transform.GetIsuladCfgTool().GetRuntimePath() + transformTestCtrID + basePath = isulad.GetIsuladTool().GetRuntimePath() + transformTestCtrID hostname = basePath + "/hostname" hosts = basePath + "/hosts" resolvconf = basePath + "/resolv.conf" @@ -361,7 +362,7 @@ func Test_dockerTransformer_initStorageDriver(t *testing.T) { dt := &dockerTransformer{} Convey("Test_dockerTransformer_initStorageDriver", t, func() { Convey("overlay2 driver", func() { - err := transform.InitIsuladTool("", "", "overlay2", "") + err := isulad.InitIsuladTool("", "", "overlay2", "") So(err, ShouldBeNil) ol, err := dt.initStorageDriver() So(err, ShouldBeNil) @@ -370,7 +371,7 @@ func Test_dockerTransformer_initStorageDriver(t *testing.T) { }) Convey("devicemapper driver", func() { - err := transform.InitIsuladTool("", "", "devicemapper", "") + err := isulad.InitIsuladTool("", "", "devicemapper", "") So(err, ShouldBeNil) ol, err := dt.initStorageDriver() So(err, ShouldBeNil) @@ -500,8 +501,8 @@ func initDockerTransformTest(repalceVar, id, src, dest string, initIsuladTool bo } if initIsuladTool { graph := filepath.Join(repalceVar + "/lib/isulad") - _ = transform.InitIsuladTool(graph, "", "", "") - return transform.GetIsuladCfgTool().PrepareBundleDir(id) + _ = isulad.InitIsuladTool(graph, "", "", "") + return isulad.GetIsuladTool().PrepareBundleDir(id) } return nil } diff --git a/transform/storage.go b/transform/storage.go index 41024ea..6a4e831 100644 --- a/transform/storage.go +++ b/transform/storage.go @@ -13,15 +13,8 @@ package transform import ( - "context" - "fmt" - "net" - "strings" "time" - "github.com/sirupsen/logrus" - "google.golang.org/grpc" - "isula.org/isula-transform/api/isula" "isula.org/isula-transform/types" ) @@ -36,10 +29,6 @@ const ( isuladImgTimeout = 10 * time.Second ) -var ( - gBaseStorageDriver BaseStorageDriver -) - // StorageDriver defines methods for creating and rolling storage resources type StorageDriver interface { // GenerateRootFs returns a new rootfs path used by container @@ -57,113 +46,3 @@ type BaseStorageDriver interface { MountRootFs(id string) error UmountRootFs(id string) error } - -type baseStorageDriver struct { - imgClient isula.ImageServiceClient -} - -func initBaseStorageDriver(addr string) error { - client, err := newIsuladImgClient(addr) - if err != nil { - return err - } - gBaseStorageDriver = &baseStorageDriver{imgClient: client} - return nil -} - -// GenerateRootFs returns a new rootfs path of container -func (sd *baseStorageDriver) GenerateRootFs(id, image string) (string, error) { - req := &isula.ContainerPrepareRequest{ - Image: image, - Id: id, - Name: id, - } - resp, err := sd.imgClient.ContainerPrepare(context.Background(), req) - if err != nil { - return "", err - } - if msg := resp.GetErrmsg(); msg != "" { - removeReq := &isula.ContainerRemoveRequest{ - NameId: id, - } - rResp, rErr := sd.imgClient.ContainerRemove(context.Background(), removeReq) - logrus.Infof("isulad-img remove container: %v, err: %v", rResp, rErr) - return "", fmt.Errorf("isulad-img prepare failed: %s", msg) - } - return resp.MountPoint, nil -} - -// CleanupRootFs cleans up container data storaged in the isulad -func (sd *baseStorageDriver) CleanupRootFs(id string) { - req := &isula.ContainerRemoveRequest{ - NameId: id, - } - // During the rollback, only information is collected - _, err := sd.imgClient.ContainerRemove(context.Background(), req) - if err != nil { - logrus.Warnf("isulad-img remove container %s: %v", id, err) - } else { - logrus.Infof("isulad-img remove container %s successful", id) - } -} - -// MountRootFs mounts the rw layer of container -func (sd *baseStorageDriver) MountRootFs(id string) error { - req := &isula.ContainerMountRequest{ - NameId: id, - } - resp, err := sd.imgClient.ContainerMount(context.Background(), req) - if err != nil { - return err - } - if msg := resp.GetErrmsg(); msg != "" { - return fmt.Errorf("isulad-img mount failed: %s", msg) - } - return nil -} - -// UmountRootFs umounts the rw layer of container -func (sd *baseStorageDriver) UmountRootFs(id string) error { - req := &isula.ContainerUmountRequest{ - NameId: id, - } - resp, err := sd.imgClient.ContainerUmount(context.Background(), req) - if err != nil { - return err - } - if msg := resp.GetErrmsg(); msg != "" { - req.Force = true - fResp, fErr := sd.imgClient.ContainerUmount(context.Background(), req) - logrus.Infof("isulad-img force umount container: %v, err: %v", fResp, fErr) - if fErr == nil && fResp.GetErrmsg() == "" { - return nil - } - return fmt.Errorf("isulad-img umount failed: %s", msg) - } - return nil -} - -func dialOpt(ctx context.Context, addr string) (net.Conn, error) { - // dialer to support unix dial - dialer := func(addr string, timeout time.Duration) (net.Conn, error) { - proto, address := "unix", strings.TrimPrefix(addr, "unix://") - return net.DialTimeout(proto, address, timeout) - } - if deadline, ok := ctx.Deadline(); ok { - return dialer(addr, time.Until(deadline)) - } - return dialer(addr, isuladImgTimeout) -} - -func newIsuladImgClient(addr string, opts ...grpc.DialOption) (isula.ImageServiceClient, error) { - if addr == "" { - addr = defaultAddress - } - opts = append(opts, grpc.WithInsecure(), grpc.WithContextDialer(dialOpt)) - conn, err := grpc.Dial(addr, opts...) - if err != nil { - return nil, err - } - - return isula.NewImageServiceClient(conn), nil -} -- Gitee