cloud-barista / cm-data-mold

Apache License 2.0
2 stars 1 forks source link

Change the method of credentials #39

Open zcon-cychoi opened 10 months ago

zcon-cychoi commented 10 months ago

(Ref. #35 코멘트)

@zcon-cychoi 넵 설명 감사드립니다. 자세히 설명해 주셔서 바로바로 이해가 잘 되네요 😃

Migration 이외의 파트를 제가 구분하여 PR 올리도록 하겠습니다.

Migration 관련 파트는 Credential 관련 부분을 분리해야할 필요가 있고요. 아래 두 가지 안 정도를 생각해 볼 수 있을 것 같습니다. 1안) cm-data-mold binary와 같은 디렉토리에 credential을 사전 세팅 2안) Credential을 최초 한번 업로드하고, 이후 Migration시 file의 ID 또는 path를 활용하는 방안

관련하여 수정 가능여부, 공수, 이슈 등을 먼저 파악해 보려고 합니다. 확인해 보시고 공유해주시기 바랍니다. (코드 개선은 이후에 진행하도록 하겠습니다.)

credential 관련하여 업데이트할 부분에 대한 생각을 정리해봤습니다.

API 에서는 기본적으로 마이그레이션 수행에 필요한 함수 실행 이전에 crendential 파일 유/무를 확인하고 관련 값을 업데이트 해주면 될 듯 합니다.

1안에 대한 변경 부분 확인 사항

2안에 대한 추가/변경 필요 사항

1,2안 공통

func MigrationS3ToNCPPostHandler(ctx echo.Context) error {

    start := time.Now()

    logger, logstrings := pageLogInit("migs3ncp", "Export s3 data to ncp objectstorage", start)

    params := MigrationForm{}
    if !getDataWithBind(logger, start, ctx, &params) {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }

        // TODO: getS3OSC 함수 실행 전에 params 에 credential 업데이트

    awsOSC := getS3OSC(logger, start, "mig", params)
    if awsOSC == nil {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }

    ncpOSC := getS3COSC(logger, start, "mig", params)
    if ncpOSC == nil {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }
...
func MigrationGCPToS3PostHandler(ctx echo.Context) error {

    start := time.Now()

    logger, logstrings := pageLogInit("genlinux", "Export gcp data to s3", start)

    params := MigrationForm{}
    if !getDataWithBind(logger, start, ctx, &params) {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }

        // TODO: credential 을 저장된 파일 사용하는지 입력된 폼을 사용하는지 체크 후 gcpCreateCredFile 실행 여부 선택
    credTmpDir, credFileName, ok := gcpCreateCredFile(logger, start, ctx)
    if !ok {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }
    defer os.RemoveAll(credTmpDir)

        // TODO: credFileName 은 credential 파일 이름[string]
    gcpOSC := getGCPCOSC(logger, start, "mig", params, credFileName)
    if gcpOSC == nil {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }
...
func MigrationMySQLPostHandler(ctx echo.Context) error {

    start := time.Now()

    logger, logstrings := pageLogInit("migmysql", "Import mysql to mysql", start)

    formdata := MigrationMySQLForm{}
    if !getDataWithBind(logger, start, ctx, &formdata) {
        return ctx.JSON(http.StatusOK, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }
    params := GetMigrationParamsFormFormData(formdata)

        // TODO: crendential 파일이 있으면 getMysqlRDBC 함수 호출 이전에 params 에 값 업데이트

    srdbc := getMysqlRDBC(logger, start, "smig", params)
    if srdbc == nil {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }

    trdbc := getMysqlRDBC(logger, start, "tmig", params)
    if trdbc == nil {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }
...
func MigrationMongoDBToDynamoDBPostHandler(ctx echo.Context) error {

    start := time.Now()

    logger, logstrings := pageLogInit("migMGDN", "Export mongoDB data to dynamoDB", start)

    params := MigrationForm{}
    if !getDataWithBind(logger, start, ctx, &params) {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }

        // TODO: credential 파일 존재하면 getMongoNRDBC 함수 호출 이전에 params 값 업데이트

    ncpNRDB := getMongoNRDBC(logger, start, "mig", params)
    if ncpNRDB == nil {
        return ctx.JSON(http.StatusInternalServerError, models.BasicResponse{
            Result: logstrings.String(),
            Error:  nil,
        })
    }
...